web-dev-qa-db-ja.com

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で文字列の長さを取得する正しい方法は何ですか?

32
Molanda

次のように拡張機能を使用できます。

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
87
Dharmesh

プロパティカウントを含むcharactersプロパティを使用する必要があります。

yourString.characters.count

23
pierre23

Swift 2.0 UPDATE

extension String {
    var count: Int { return self.characters.count }
}

つかいます:

var str = "I love Swift 2.0!"
var n = str.count

役立つプログラミングのヒントとハック

7
quemeful

ここにすべてがあります- 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
}
6
BLC

count(mystr)は正しい方法です。エンコードを変換する必要はありません。

これ:if count(mystr.utf16) >= 3は、Int16(3)を実行する限り問題ありません。

編集:これは古い答えです。 OPは、Swift 2を反映するように質問を更新し、上記の答えは正しいです。

2
Schemetrical