Dưới đây là một giải pháp sản xuất sẵn sàng trong 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
}
}
Cách sử dụng:
let a = String(unicodeCodepoint: 42) // "*"
var b = a + 126 // "*~"
b += 33 // "*~!"
Lưu ý rằng điều này làm việc với tất cả ASCII và codepoints Unicode, vì vậy bạn có thể làm điều này:
var emoji = String(unicodeCodepoint: 0x1F469)! // ""
emoji += 0x200D // ""
emoji += 0x1F4BB // ""
Lưu ý cá nhân, tôi sẽ không sử dụng mã này trong mã của mình. Tôi đã mong đợi ":" + 40
để trở thành ":40"
, chứ không phải ":("
. Nếu bạn thích vị trí thứ hai, trong đó 40
trở thành "("
, thì điều này sẽ hoạt động tốt cho bạn :)
Nguồn
2017-04-07 21:43:04
Ông cũng có thể sử dụng 's + =" \ (UnicodeScalar (x)) "' – dasblinkenlight
Đó là một điểm tốt. Và để làm sạch nó, bạn có thể thêm toán tử + = 'func + = (inout left: String, right: Int) {left + =" \ (UnicodeScalar (phải)) " }' – connor
là có cách để lấy giá trị thập phân từ ký tự nhanh –