我正在编写为Authorization:
设置NSMutableURLRequest
标头的代码:
private func setAuthHeader(request: NSMutableURLRequest) {
let plain = NSString(format: "%@:%@", self.userName, self.password)
let plainBytes = plain.dataUsingEncoding(NSUTF8StringEncoding)!
let headerValue = NSString(format: "Basic %@", plainBytes.base64EncodedDataWithOptions(NSDataBase64EncodingOptions(rawValue: 0)))
request.setValue( headerValue, forHTTPHeaderField: "Authorization" )
}
但当我为setValue
选择“转到定义”时,Xcode将其显示为:
- (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field;
因此setValue
需要NSString
参数值,而headerValue
是NSString
类型的参数。
然而,Swift编译器给我这个错误信息:
RestClient.swift:33:21:'
NSString
'不能隐式转换为'String
';你的意思是使用'as
'来明确转换?
从哪里获得String
?
自动修复是将其更改为:
request.setValue( headerValue as String, forHTTPHeaderField: "Authorization" )
......但为什么认为有必要?
答案 0 :(得分:0)
实际上,您在问题中给出的定义是setValue函数的Obj-C签名。 Swift函数具有以下声明,您可以在Apple的NSMutableURLRequest here文档中看到:
声明
func setValue(_ value: String?, forHTTPHeaderField field: String)