字符串格式化正在崩溃

时间:2017-08-10 13:33:03

标签: ios swift string

var modifiedString: String {       

    var outString = String()
        for thisChar in self.characters {
            if (thisChar == " "){
                outString.appendingFormat("%%02X",thisChar ) // This line is asking me unwrap as CVarArg
                outString.appendingFormat("%%02X",thisChar as! CVarArg) // This line crashes
            }
        }
    }
}

我正在尝试使用outString.appendingFormat("%%02X",thisChar ) 但是这一行迫使我打开CVarArg,但是当我这样做时它会崩溃。这有什么问题

3 个答案:

答案 0 :(得分:1)

我认为这是放在String扩展名中。

发生错误是因为Character不符合CVarArg。您需要将其转换为符合CVarArg的类型,而不是将字符直接转换为CVarArg。在这里,最好的选择是String

outString.appendingFormat("%%02X", "\(thisChar)")

您也错过了一份退货声明。

但是,即使您这样做并且您的代码编译,您编写的属性仍然没有多大意义。我认为它不像你想要的那样有效,但没有更多信息我无法确定。

答案 1 :(得分:0)

使用此代码 -

var modifiedString: String {
        var outString = String()
        for thisChar in self.characters {
            if (thisChar == " "){
                //    outString = outString.appendingFormat("%%02X",thisChar.description )
                outString = outString.appendingFormat("%%02X", "\(thisChar)")

            }
            else
            {
                outString = outString.appending("\(thisChar)")
            }
        }
        return outString
    }

希望这有帮助!

答案 2 :(得分:0)

目前还不清楚你想做什么,但我想你想做这样的事情:

extension String {
    var modifiedString: String {
        var outString = ""
        for thisChar in self.characters {
            if thisChar == " " {
                let charCode = String(thisChar).unicodeScalars.first!.value
                outString += "%" + String(format: "%02X", charCode)
                //### Or if you prefer... (Do not miss, you need 3 '%'s in the format string.)
                //outString = outString.appendingFormat("%%%02X", charCode)
            } else {
                outString.append(thisChar)
            }
        }
        return outString
    }
}

print("what you really want to do?".modifiedString)
//->what%20you%20really%20want%20to%20do?

使用for thisChar in self.characters进行循环,thisChar的类型变为Character,在Swift中从Character获取字符代码并不容易。

let charCode = String(thisChar).unicodeScalars.first!.value只包含一个thisChar时,可能会有一些更好的方法,UnicodeScalar按预期工作。

你应该更好地了解Swift有一个名为addingPercentEncoding的方法:

let result = "what you really want to do?".addingPercentEncoding(withAllowedCharacters: CharacterSet.whitespaces.inverted)!
print(result)
//->what%20you%20really%20want%20to%20do?