CFString字符串!在swift 1.2中不能转换为String

时间:2015-04-10 08:04:39

标签: iphone swift

Alamofire有这个功能

func escape(string: String) -> String {
    let legalURLCharactersToBeEscaped: CFStringRef = ":/?&=;+!@#$()',*"

    return CFURLCreateStringByAddingPercentEscapes(nil, string, nil, legalURLCharactersToBeEscaped, CFStringBuiltInEncodings.UTF8.rawValue)

}

此func中的编译器显示“CFString!不可转换为String”错误。我已经尝试Convert CFString to NSString - Swift投了这个,但没有运气。

1 个答案:

答案 0 :(得分:5)

来自Xcode 6.3 Release Notes

  

已删除从桥接的Objective-C类(NSString / NSArray / NSDictionary)到其相应的Swift值类型(String / Array / Dictionary)的隐式转换,使Swift类型系统更简单,更可预测。   ...
  要执行此类桥接转换,请使用as关键字明确转换。

您必须明确地将CFString/NSString转换为Swift String

func escape(string: String) -> String {
    let legalURLCharactersToBeEscaped: CFStringRef = ":/?&=;+!@#$()',*"

    return CFURLCreateStringByAddingPercentEscapes(nil, string,
        nil, legalURLCharactersToBeEscaped,
        CFStringBuiltInEncodings.UTF8.rawValue) as String
                                     // HERE ---^
}

另一个方向的转换(Swift StringNSString)仍然会自动完成,这就是您的string参数的原因 函数可以直接传递给 预期的CFURLCreateStringByAddingPercentEscapes()函数 一个CFString参数。