Длина строки в Swift 1.2 и Swift 2.0

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

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?

Ответ 1

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

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

Ответ 2

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

yourString.characters.count

Ответ 4

Здесь все в одном - скопировано из здесь

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
}

Ответ 5

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

Это: if count(mystr.utf16) >= 3 отлично, если вы делаете Int16(3)

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