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

NSString不能隐式转换为String,但所有内容都是NSString,string,swift,nsstring,String,Swift,Nsstring,我正在编写代码,为NSMutableURLRequest设置授权:头: private func setAuthHeader(request: NSMutableURLRequest) { let plain = NSString(format: "%@:%@", self.userName, self.password) let plainBytes = plain.dataUsingEncoding(NSUTF8StringEncoding)! let

我正在编写代码,为
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" )

…但为什么认为这是必要的?

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

声明

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

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

声明

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