![](/img/trans.png)
[英]Swift: '()' is not convertible to '[String : AnyObject]'
[英]inout String is not convertible to String in Swift 3
我有以下代码可以在Swift 2中正常工作:
jsonObject = [
"AppId": fetchQueryResult[0].appId,
"MobileNo": String(
data: try RNDecryptor.decryptData(self.fetchQueryResult[0].userMobileNumber.dataFromHexString() as Data!, withPassword: Constants.ENCRYPTION_KEY),
encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))! as String,
"DeviceType": Constants.DEVICE_TYPE,
"AppVersion": fetchQueryResult[0].appVersion,
"Password": NSString(data: try RNDecryptor.decryptData(self.fetchQueryResult[0].password.dataFromHexString(), withPassword: Constants.ENCRYPTION_KEY), encoding: String.Encoding.utf8)! as String
]
我将代码升级到Swift 3,但出现错误:
'inout String'不能转换为'String'类型
它在此行给出错误:
"MobileNo" : String(data .....)
有关更多详细信息,我正在编写函数dataFromHexString()
:
extension String {
subscript (i : Int) -> Character {
return self[self.characters.index(self.startIndex, offsetBy: i)]
}
mutating func dataFromHexString() -> NSMutableData {
let data = NSMutableData(reserveCapacity(characters.count / 2))
let regex = try! NSRegularExpression(pattern: "[0-9a-f]{1,2}", options: .caseInsensitive)
regex.enumerateMatches(in: self, options: [], range: NSMakeRange(0, characters.count)) {
match, flags,stop in
let byteString = (self as NSString).substring(with: match!.range)
let num = UInt8(byteString.withCString {strtoul($0, nil, 16)})
data.append([num], length: 1)
}
return data
}
}
我是iOS新手。 提前致谢。
您应该将分配包装在do / catch块中,以正确处理任何异常。
do {
jsonObject = [
"AppId": fetchQueryResult[0].appId,
"MobileNo": String(
data: try RNDecryptor.decryptData(self.fetchQueryResult[0].userMobileNumber.dataFromHexString() as Data!, withPassword: Constants.ENCRYPTION_KEY),
encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))! as String,
"DeviceType": Constants.DEVICE_TYPE,
"AppVersion": fetchQueryResult[0].appVersion,
"Password": NSString(data: try RNDecryptor.decryptData(self.fetchQueryResult[0].password.dataFromHexString(), withPassword: Constants.ENCRYPTION_KEY), encoding: String.Encoding.utf8)! as String
]
} catch let error {
print(error.localizedDescription)
}
请检查以下代码:
mutating func dataFromHexString() -> NSMutableData {
let data = NSMutableData(reserveCapacity(characters.count / 2))
let regex = try! NSRegularExpression(pattern: "[0-9a-f]{1,2}", options: .caseInsensitive)
regex.enumerateMatches(in: self, options: [], range: characters.startIndex..<characters.endIndex) {
match, flags,stop in
let byteString = (self as NSString).substring(with: match!.range)
let num = UInt8(byteString.withCString {strtoul($0, nil, 16)})
data.append([num], length: 1)
}
return data
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.