简体   繁体   English

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

[英]inout String is not convertible to String in Swift 3

I have the following code that works fine in Swift 2: 我有以下代码可以在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
            ]

I am upgrading my code to Swift 3, however, and I got an error: 我将代码升级到Swift 3,但出现错误:

'inout String' is not convertible to type 'String' 'inout String'不能转换为'String'类型

It gives error on this line: 它在此行给出错误:

"MobileNo" : String(data .....)

上下文错误

For more detail, I am writing the function dataFromHexString() : 有关更多详细信息,我正在编写函数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
    }
}

I am new to iOS. 我是iOS新手。 Thanks in advance. 提前致谢。

You should wrap the assignment inside a do/catch block to properly handle any exceptions. 您应该将分配包装在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)
}

Please check the below code : 请检查以下代码:

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