Длина строки в 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
Ответ 3
Swift 2.0 UPDATE
extension String {
var count: Int { return self.characters.count }
}
Использование:
var str = "I love Swift 2.0!"
var n = str.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, и приведенный выше ответ правильный.