2015-09-15 3 views
0

Я пытаюсь получить этот кусок кода, работающий в Swift 2:Преобразование между различными Int размерами в Swift 2

func +(left: Character, right: Int) -> String { 
    return String(UnicodeScalar(String(left).utf16[0] + right)) 
} 

Он работал со старыми версиями Swift.

Во-первых, я преобразовал utf16[0] в utf16[0].value, но он говорит, что Binary operator + cannot be applied to operands of type Int16 and Int.

Также с right как Int16, не решает.

ответ

1

Вот как я получил его для работы с utf16.

func +(left: Character, right: Int) -> String { 
    let scalars = String(left).utf16 
    let value = scalars[scalars.startIndex].value as Int 
    return String(UnicodeScalar(value + right)) 
} 

Кажется более естественным с unicodeScalars.

func +(left: Character, right: Int) -> String { 
    let scalars = String(left).unicodeScalars 
    let value = Int(scalars[scalars.startIndex].value) 
    return String(UnicodeScalar(value + right)) 
} 
+0

Первый не составляет от Xcode 7 бета-6 (Int16 не конвертируется в Int). Другой компилируется. – Teejay

+0

Я переписал его как однострочный. Обратите внимание, что вы можете получить доступ к первому индексу коллекции скаляров с помощью 'first':' return String (UnicodeScalar (Int (String (left) .unicodeScalars.first! .value) + right)) ' – Teejay

1

Я получил его на работу с помощью:

func +(left: Character, right: Int) -> String { 
    return String(UnicodeScalar(Int(String(left).utf16.first!) + right)) 
} 
+0

Спасибо, это тоже работает – Teejay

+1

Это очень похоже на ваш один лайнер, который я не видел, пока не разработал свое решение. – vacawama

+0

Странно, что преобразование из CodeUnit в Int успешно, но из Int16 не удается! – Teejay

Смежные вопросы