尝试从httpurlresponse获取标题时,我发现iOS模拟器对细胞不敏感,而真实的设备对病例敏感。
Web服务返回HTTP标题"奶奶:xxxx"
当标头键具有大写字母时: urlResponse.response.allHeaderFields["Grandmas-Cookies"] as? String
- 模拟器找不到键。
- 真实的设备看到钥匙。
当标头键具有所有小写字母时: urlResponse.response.allHeaderFields["grandmas-cookies"] as? String
- 模拟器确实找到了键。
- 真正的设备看不到键。
是否可以对模拟器进行设置,以与真实设备相似?在这一点上,将Web服务中的HTTP标头更改为小写是不可取的,但是这仅是最近才开始发生的(是的,这是其中一个有趣的时期(。
编辑:
@adam我找到了一种更好的方法来确保这不是问题。
我创建了使检查案例不敏感的功能。
func find(header: String) -> String? {
let keyValues = allHeaderFields.map { (String(describing: $0.key).lowercased(), String(describing: $0.value)) }
if let headerValue = keyValues.filter({ $0.0 == header.lowercased() }).first {
return headerValue.1
}
return nil
}
以下可能对某些人有用。
要解决此问题,我创建了一个struct
。在struct
中,我创建了一个静态变量grandmasCookies
,现在可以从应用程序中的任何地方引用。这返回上案
奶奶
在手机设备上运行时。
这返回小写
奶奶
当您在MacBook Pro。
之类的设备上运行时struct Platform {
static let grandmasCookies: String = {
var xtoken = "Grandmas-Cookies"
#if arch(i386) || arch(x86_64)
xtoken = "grandmas-cookies"
#endif
return xtoken
}()
static let isSimulator: Bool = {
var isSim = false
#if arch(i386) || arch(x86_64)
isSim = true
#endif
return isSim
}()
}
我创建了第二个便利变量isSimulator
,该变量在从模拟器运行时返回true和在电话设备上运行时返回。
我从此stackoverflow帖子中调整了代码,以制作一个适用于您的方案的解决方案,并且我也面临的解决方案。