NSString不能隐式转换为String - 但所有内容都是NSString

时间:2016-03-11 07:43:59

标签: string swift nsstring

我正在编写为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参数值,而headerValueNSString类型的参数。

然而,Swift编译器给我这个错误信息:

  

RestClient.swift:33:21:'NSString'不能隐式转换为'String';你的意思是使用'as'来明确转换?

从哪里获得String

自动修复是将其更改为:

request.setValue( headerValue as String, forHTTPHeaderField: "Authorization" )

......但为什么认为有必要?

1 个答案:

答案 0 :(得分:0)

实际上,您在问题中给出的定义是setValue函数的Obj-C签名。 Swift函数具有以下声明,您可以在Apple的NSMutableURLRequest here文档中看到:

  

声明

func setValue(_ value: String?, forHTTPHeaderField field: String)