Oto produkcja gotowe rozwiązanie w Swift 3:
extension String {
init(unicodeScalar: UnicodeScalar) {
self.init(Character(unicodeScalar))
}
init?(unicodeCodepoint: Int) {
if let unicodeScalar = UnicodeScalar(unicodeCodepoint) {
self.init(unicodeScalar: unicodeScalar)
} else {
return nil
}
}
static func +(lhs: String, rhs: Int) -> String {
return lhs + String(unicodeCodepoint: rhs)!
}
static func +=(lhs: inout String, rhs: Int) {
lhs = lhs + rhs
}
}
Zastosowanie:
let a = String(unicodeCodepoint: 42) // "*"
var b = a + 126 // "*~"
b += 33 // "*~!"
Zauważ, że ten działa ze wszystkimi ASCII i codepoints Unicode, więc można to zrobić:
var emoji = String(unicodeCodepoint: 0x1F469)! // ""
emoji += 0x200D // ""
emoji += 0x1F4BB // ""
Jako osobista uwaga, nie użyłbym tego w moim kodzie. Spodziewałbym się, że ":" + 40
stanie się ":40"
, a nie ":("
. Jeśli wolisz drugie, gdzie 40
stanie się , to powinno dobrze działać :)
Może również użyć 's + =" \ (UnicodeScalar (x)) "' – dasblinkenlight
To dobra uwaga. Aby go wyczyścić, możesz dodać operatora + = 'func + = (w lewym: String, right: Int) {left + =" \ (UnicodeScalar (right)) " }' – connor
} czy istnieje sposób, aby uzyskać wartość dziesiętna od postaci w szybkim tempie –