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
,但是当我这样做时它会崩溃。这有什么问题
答案 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?