33

In the previous version of Swift, I had the following code.

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

With the latest release of Swift 1.2, I now get the following error.

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

So I change my code as follows:

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

But that doesn't work. I now get the following error message instead.

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

What is the correct way to get the length of a string with Swift 1.2?

Alexander Ushakov
  • 5,139
  • 3
  • 27
  • 50
Molanda
  • 661
  • 1
  • 6
  • 13

5 Answers5

87

You can use extension for it like:

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

and you can use it:

if mystr.length >= 3 {

}

Or you can directly count this way:

if count(mystr) >= 3{

}

And this is also working for me :

if count(mystr.utf16) >= 3 {

}

For Swift 2.0:

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

Another extension:

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

If you want direct use:

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
Leo Dabus
  • 229,809
  • 59
  • 489
  • 571
Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165
  • Yeah I don't understand OP's error, its working for me too. – Schemetrical Apr 11 '15 at 07:23
  • Thank you for the suggestion. Even with count(mystr) I see the error '(String) -> _' is not identical to 'Int16'. – Molanda Apr 11 '15 at 07:24
  • 1
    Ah, I found it. The NSManagedObject based class had a field called "count" defined as a Int16 that was overriding the global count function. Thank you for the sanity check. – Molanda Apr 11 '15 at 07:38
23

You have to use characters property that contains the property count :

yourString.characters.count

pierre23
  • 3,846
  • 1
  • 28
  • 28
7

Swift 2.0 UPDATE

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

Use:

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

Helpful Progamming Tips and Hacks

quemeful
  • 9,542
  • 4
  • 60
  • 69
6

Here is all in one -- copied from 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
}
Community
  • 1
  • 1
BLC
  • 2,240
  • 25
  • 27
2

count(mystr) is the correct way, you do not need to convert the encoding.

This: if count(mystr.utf16) >= 3 is fine as long as you do Int16(3)

Edit: this is an old answer. OP updated his question to reflect Swift 2 and the above answer is correct.

Schemetrical
  • 5,506
  • 2
  • 26
  • 43