上下文类型'字符串'不能与数组文字一起使用

时间:2017-09-18 08:13:11

标签: ios swift

将代码转换为Swift 3.0时出错。我的示例代码如下:

func hexRepresentation()->String {

    let dataLength:Int = self.count
    let string = NSMutableString(capacity: dataLength*2)
    let dataBytes:UnsafeRawPointer = (self as NSData).bytes

    for idx in 0..<dataLength {
         string.appendFormat("%02x", [UInt(dataBytes[idx])] as String )
    }

    return string as String
}

1 个答案:

答案 0 :(得分:0)

这一行做了什么:

 string.appendFormat("%02x", [UInt(dataBytes[idx])] as String )

首先,它接受idx中索引dataBytes处的字节并将其包装在一个数组中。这是错误消息中引用的数组文字。

接下来它尝试将数组转换为String - 而不是转换:强制转换。编译器知道这是不可能的,因此错误消息。

幸运的是,您不希望将参数转换为字符串,因为您的格式说明符要求UInt%x),所以您真正想要的只是

string.appendFormat("%02x", UInt(dataBytes[idx]))

至于获取字节,Swift类型Data有一个函数foreach,它可以方便地迭代字节:

self.forEach { string.appendFormat("%02x", UInt($0)) }