繁体   English   中英

在Swift 3中inout字符串不可转换为String

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM