如何桥接Swiftstring到Objective C NSString?
我服用疯狂的药片吗? 直接从文档中删除:
“Swift自动在stringtypes和NSString类之间进行桥接。 这意味着,在任何你使用NSString对象的地方,你都可以使用Swiftstringtypes,并获得两种types的好处 – 即stringtypes的插值和Swiftdevise的API以及NSString类的广泛function。 出于这个原因,你几乎不需要直接在你自己的代码中使用NSString类。 实际上,当Swift导入Objective-C API时,它将用Stringtypesreplace所有的NSStringtypes。 当您的Objective-C代码使用Swift类时,导入器会用导入的API中的NSStringreplace所有的Stringtypes。
要启用string桥接,只需导入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)
我错过了什么吗?
你的问题已经有了答案。 你错过了演员。 在编写Swift代码的时候,像这样的一个语句
var str = "Hello World"
创build一个Swift String
,而不是NSString
。 要使其作为NSString
工作,在使用它之前,应该使用as
运算符将其转换为NSString
。
这与调用Objective-C中编写的方法并提供String
而不是NSString
作为参数不同。
从String
到NSString
使用下面的构造函数:
let swiftString:String = "I'm a string." let objCString:NSString = NSString(string:swiftString)
使用Xcode 7(beta) ,使用从String
到NSString
的downcast,如下例所示,将导致一条警告消息: Cast from'String?' 到不相关的types“NSString”总是失败 :
let objcString:NSString = swiftString as! NSString // results in error
这是一个例子:
string str_simple = "HELLO WORLD"; //string to NSString NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str() encoding:[NSString defaultCStringEncoding]]; NSLog(stringinObjC);