Ios inout字符串不能转换为Swift 3中的字符串

Ios inout字符串不能转换为Swift 3中的字符串,ios,swift3,Ios,Swift3,我有以下代码在Swift 2中运行良好: jsonObject = [ "AppId": fetchQueryResult[0].appId, "MobileNo": String( data: try RNDecryptor.decryptData(self.fetchQueryResult[0].userMobileNumber.dataFromHexString() as Data!,

我有以下代码在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()


我是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)
}

您应该将分配包装在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
}
mutating func dataFromHexString()->NSMutableData{
let data=NSMutableData(保留容量(characters.count/2))
让regex=try!NSRegularExpression(模式:“[0-9a-f]{1,2}”,选项:。不区分大小写)

regex.enumerateMatches(in:self,options:[],range:characters.startIndex..请检查以下代码:

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
}
mutating func dataFromHexString()->NSMutableData{
let data=NSMutableData(保留容量(characters.count/2))
让regex=try!NSRegularExpression(模式:“[0-9a-f]{1,2}”,选项:。不区分大小写)

regex.enumerateMatches(in:self,options:[],range:characters.startIndex..试试这个(self.fetchQueryResult[0]。userMobileNumber as!String)。dataFromHexString()你能检查self.fetchQueryResult[0]吗。userMobileNumber是字符串吗?是的,它是字符串@NSManaged var userMobileNumber:String试试这个(self.fetchQueryResult[0]。userMobileNumber as!String).dataFromHexString()是否可以检查self.fetchQueryResult[0].userMobileNumber是一个字符串?是的,它是一个字符串@NSManaged var userMobileNumber:StringThank您的建议,但我在这一行遇到了相同的错误:range:characters.startIndex..谢谢您的建议,但我在这一行遇到了相同的错误:range:characters.startIndex。。