Как связать Swift String с Objective C NSString?
Я беру сумасшедшие таблетки? Непосредственно из документации:
"Swift автоматически соединяет между типом String и классом NSString. Это означает, что везде, где вы используете объект NSString, вместо этого вы можете использовать тип Swift String и получать преимущества обоих типов: интерполяция типов String и Swift API и широкие функциональные возможности классов NSString. По этой причине вам почти не нужно будет использовать класс NSString непосредственно в вашем собственном коде. Фактически, когда Swift импортирует API Objective-C, он заменяет все типы NSString типами String. Когда ваш Objective-C код использует класс Swift, импортер заменяет все типы строк NSString в импортированном API.
Чтобы включить строковое связывание, просто импортируйте Foundation. "
Я сделал это... считаю:
import Foundation
var str = "Hello World"
var range = str.rangeOfString("e")
// returns error: String does not contain member named: rangeOfString()
Однако:
var str = "Hello World" as NSString
var range = str.rangeOfString("e")
// returns correct (2, 1)
Я что-то упустил?
Ответы
Ответ 1
У вас уже есть ответ в вашем вопросе. Вам не хватает роли. При написании кода Swift такое утверждение, как этот
var str = "Hello World"
создает Swift String
, а не NSString
. Чтобы заставить его работать как NSString
, перед тем, как использовать его, вы должны передать его NSString
с помощью оператора as
.
Это отличается от вызова метода, написанного в Objective-C, и подачи String
вместо NSString
в качестве параметра.
Ответ 2
Чтобы перейти от String
в NSString
, используйте следующий конструктор:
let swiftString:String = "I'm a string."
let objCString:NSString = NSString(string:swiftString)
С Xcode 7 (бета), используя downcast от String
до NSString
, как показано ниже, приведет к появлению предупреждающего сообщения Cast from 'String?' для несвязанного типа "NSString" всегда терпит неудачу:
let objcString:NSString = swiftString as! NSString // results in error
Ответ 3
Вот пример для этого:
string str_simple = "HELLO WORLD";
//string to NSString
NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str()
encoding:[NSString defaultCStringEncoding]];
NSLog(stringinObjC);