Swift 1.2 不愿意我的 NSString "+" map.reduce

Swift 1.2 not willing my NSString "+" map.reduce

这是在 Swift 1.1

中完美运行的代码

在我的开头 class 我有

var bytes = [UInt8]?()

后来我有

func hexString() -> String? {
    if let b = bytes {
        return b.map({NSString(format: "%02x", [=13=])}).reduce("", +)
    }
    return nil
}

Swift 1.2 给我

调用中缺少参数标签 'combine:'

因此希望我以这种方式重新表述我的 map reduce

return b.map({NSString(format: "%02x", [=14=])}).reduce("", combine: +)

请注意第二个 reduce 参数的显式 combine。如果我这样做,尽管我在 +:

上收到另一个错误

找不到接受所提供参数的“+”重载

这个错误对我来说毫无意义,因为 NSString(format:) 产生的是一个 NSString,所以它应该与 + 一起工作,对吗?

似乎是因为 Swift 1.2 禁用了桥接。此替换不会产生错误:

var bytes = [UInt8]?()

func hexString() -> String? {
    if let b = bytes {
        return b.map() {String(format: "%02x", [=10=])}.reduce("", combine: +)
    }
    return nil
}

我认为问题在于 NSString 没有实现“+”运算符,只有 String 实现了。在 Swift 1.1 中,NSString 自动转换为 String。

这就是为什么你应该使用 String 而不是 NSString。

func hexString() -> String? {
    if let b = bytes { 
        return b.map({String(format: "%02x", [=10=])}).reduce("", combine: +)
    }
    return nil
}