当尝试从HttpUrlResponse获取标头时,我发现iOS模拟器不区分大小写,而真实设备区分大小写。
Web服务返回HTTP标头" Grandmas-Cookies:XXXX"
当标题键包含大写字母时:
urlResponse.response.allHeaderFields["Grandmas-Cookies"] as? String
当标题键包含全部小写字母时:
urlResponse.response.allHeaderFields["grandmas-cookies"] as? String
我可以对模拟器进行与真实设备类似的设置吗?此时不希望将Web服务中的HTTP标头更改为小写,但奇怪的是,这种情况最近才开始发生(是的,这是其中一个有趣的时间)。
答案 0 :(得分:1)
编辑:
@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,在手机设备上运行时返回false。
我修改了此StackOverflow post中的代码,以制作适用于您的方案的解决方案以及我所面临的解决方案。