2015-04-11 2 views
32

В предыдущей версии Swift у меня был следующий код.Длина строки в Swift 1.2 и Swift 2.0

func myfunc(mystr: String) { 
    if mystr.utf16Count >= 3 { 

С последней версией Swift 1.2 я получил следующую ошибку.

'utf16Count' is unavailable: Take the count of a UTF-16 view instead, i.e. count(str.utf16) 

Хорошо, поэтому я меняю свой код следующим образом.

func myfunc(mystr: String) { 
    if count(mystr.utf16) >= 3 { 

Но это не работает. Теперь я получаю следующее сообщение об ошибке.

'(String.UTF16View) -> _' is not identical to 'Int16' 

Каков правильный способ получить длину строки с помощью Swift 1.2?

+0

правой кнопкой мыши на счет, и «Перейти к определению ». – gnasher729

+0

Спасибо за подсказку. – Molanda

ответ

85

Вы можете использовать расширение для него нравится:

extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 

и вы можете использовать его:

if mystr.length >= 3 { 

} 

Или вы можете сразу посчитать так:

if count(mystr) >= 3{ 

} 

И это также работает для меня:

if count(mystr.utf16) >= 3 { 

} 

Для Swift 2,0:

extension String { 
    var length: Int { 
     return characters.count 
    } 
} 
let str = "Hello, World" 
str.length //12 

Другой расширение:

extension String { 
    var length: Int { 
     return (self as NSString).length 
    } 
} 
let str = "Hello, World" 
str.length //12 

Если вы хотите прямого использования:

let str: String = "Hello, World" 
print(str.characters.count) // 12 

let str1: String = "Hello, World" 
print(str1.endIndex) // 12 

let str2 = "Hello, World" 
NSString(string: str2).length //12 
+0

Да, я не понимаю ошибку OP, ее работа для меня тоже. – Schemetrical

+0

Благодарим за предложение. Даже с count (mystr) я вижу ошибку '(String) -> _' не идентичен 'Int16'. – Molanda

+1

А, я нашел. Класс, основанный на NSManagedObject, имел поле «count», определенное как Int16, которое перекрывало функцию глобального подсчета. Спасибо за проверку работоспособности. – Molanda

2

count(mystr) - правильный способ, вам не нужно преобразовывать кодировку.

Это: if count(mystr.utf16) >= 3 прекрасно до тех пор, пока вы Int16(3)

Edit: это старый ответ. OP обновил свой вопрос, чтобы отразить Swift 2, и приведенный выше ответ правильный.

+0

Благодарим вас за предложение, но это дает мне ошибку '(String) -> _' не совпадает с 'Int16'. – Molanda

+0

Не рекомендуемый способ сделать это в Swift 2, вместо этого см. Ответ @Dharmesh Kheni выше. –

+0

@ King-Wizard Я знаю, я видел это полгода назад. – Schemetrical

23

Вы должны использовать символы свойство, которое содержит свойство количество:

yourString.characters.count

6

Вот все в одном - копируется из here

let str = "Hello" 
let count = str.length // returns 5 (Int) 

extension String { 
    var length: Int { return countElements(self) } // Swift 1.1 
} 
extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 
extension String { 
    var length: Int { return characters.count } // Swift 2.0 
} 
Смежные вопросы