这是不够清楚自己想要做什么,但我想你想要做这样的事情:
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
。
你应该更好地了解雨燕的方法命名为addingPercentEncoding
:
let result = "what you really want to do?".addingPercentEncoding(withAllowedCharacters: CharacterSet.whitespaces.inverted)!
print(result)
//->what%20you%20really%20want%20to%20do?
你真的想做些什么?即使你修正了这个错误,你的代码也会充满奇怪的东西。 - 缺少回报。 - appendingFormat不修改'outString',所以'for循环结束时它的值是空的。 - 格式'“%% 02X”'不会消耗参数并生成'“%02X”'。 - 白色字幕以外的所有字符均被忽略。 – OOPer
您是否尝试将ASCII值转换为十六进制数字?也许你应该使用'.utf8'而不是'.characters'? – Sulthan
另外,你只编码空格字符,因为'if thisChar ==“”'? – Sulthan