Вызов метода NSString для строки в Swift
Apple Swift documentation утверждает, что
Если вы работаете с базой Foundation в Cocoa или Cocoa Touch, весь API NSString доступен для вызова любого созданного вами строкового значения
Если у меня есть объект String, например
var newString: String = "this is a string"
Как выполнить операции NSString, такие как containsString
в моей строке String var?
Ответы
Ответ 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
}