Как связать 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);