如何桥接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作为参数不同。

StringNSString使用下面的构造函数:

 let swiftString:String = "I'm a string." let objCString:NSString = NSString(string:swiftString) 

使用Xcode 7(beta) ,使用从StringNSString的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);