Подтвердить что ты не робот

Вызов метода NSString для строки в Swift

Apple Swift documentation утверждает, что

Если вы работаете с базой Foundation в Cocoa или Cocoa Touch, весь API NSString доступен для вызова любого созданного вами строкового значения

Если у меня есть объект String, например

var newString: String = "this is a string"

Как выполнить операции NSString, такие как containsString в моей строке String var?

4b9b3361

Ответ 1

После некоторого исследования выглядит, что containsString не является функцией String, но к нему можно получить доступ путем подключения к NSString.

В разделе "Документация Apple" на Используя Swift с Cocoa и Objective-C, он говорит, что

Swift автоматически соединяет между строковым типом и NSString класс. Это означает, что везде, где вы используете объект NSString, вы можете используйте вместо этого тип Swift String и получите преимущества обоих типов.

Но, похоже, что только некоторые из функций NSString доступны без явного перемычка. Чтобы подключиться к NSString и использовать любую из его функций, выполните следующие действия:

 //Example Swift String var
    var newString:String = "this is a string"

    //Bridging to NSString
    //1
    (newString as NSString).containsString("string")
    //2
    newString.bridgeToObjectiveC().containsString("string")
    //3
    NSString(string: newString).containsString("string")

Все три работы. Интересно видеть, что для Strings доступны только некоторые методы NSString, а другим - явный мост. Это может быть что-то, что строится по мере развития Swift.

Ответ 2

Методы те же, но вместо этого они используют быстрый синтаксис. Например:

var newString: String = "this is a string"
newString = newString.stringByAppendingString(" that is now longer")
println(newString)

вместо:

NSString* newString = @"this is a string";
newString = [newString stringByAppendingString:@" that is now longer"];
NSLog(newString);

Примечание:

Не все методы NSString можно вызвать в String. Некоторым нужно сначала навести на NSString так:

newString.bridgeToObjectiveC().containsString("string")

Ответ 3

Так что вам действительно нужно сделать это

var str:NSString = "Checkcontains"
str.containsString("ckc")

Обратите внимание, как там указывается объявление явного NSString. Затем вы можете использовать метод containsString. Если вы используете только var и не устанавливаете его как NSString, тогда у вас есть проблемы.

Ответ 4

Вы можете вызвать любой метод NSString для объекта Swift String; под капотом, два объекта являются "бесплатными мостами". Таким образом, вы можете просто:

var newString = "this is a string"
if newString.containsString("string") {
    //do your stuff
}