2014-09-12 19 views
8

Tôi đang cố gắng chuyển đổi biểu diễn số nguyên của ký tự ascii thành chuỗi.Chuyển đổi thành Char/String từ Ascii Int trong Swift

string += (char) int; 

Trong các ngôn ngữ khác như Java (ví dụ tại đây) tôi có thể truyền số nguyên thành char. Swift rõ ràng là không biết những điều này và tôi đoán sử dụng tất cả các NSString mạnh mẽ bằng cách nào đó sẽ có thể làm các trick.

Trả lời

20

Nó có thể không được như sạch như Java, nhưng bạn có thể làm điều đó như thế này:

var string = "" 
string.append(Character(UnicodeScalar(50))) 

Bạn cũng có thể thay đổi cú pháp để trông giống như nhiều hơn nếu bạn thích:

//extend Character so it can created from an int literal 
extension Character: IntegerLiteralConvertible { 
    public static func convertFromIntegerLiteral(value: IntegerLiteralType) -> Character { 
     return Character(UnicodeScalar(value)) 
    } 
} 

//append a character to string with += operator 
func += (inout left: String, right: Character) { 
    left.append(right) 
} 

var string = "" 
string += (50 as Character) 

Hoặc sử dụng phương pháp của dasblinkenlight:

func += (inout left: String, right: Int) { 
    left += "\(UnicodeScalar(right))" 
} 
var string = "" 
string += 50 
+6

Ông cũng có thể sử dụng 's + =" \ (UnicodeScalar (x)) "' – dasblinkenlight

+0

Đó 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

+0

là có cách để lấy giá trị thập phân từ ký tự nhanh –

2

Nếu bạn chỉ muốn chuỗi ký tự từ A ... bạn có thể sử dụng hàm này:

func characterFromInt(index : Int) -> String { 
     let startingValue = Int(("A" as UnicodeScalar).value) 
     var characterString = "" 
     characterString.append(Character(UnicodeScalar(startingValue + index))) 
     return characterString 
    } 
1

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 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 :)

Các vấn đề liên quan