在Swift中将字符串转换为NSObject

时间:2017-01-12 22:06:37

标签: ios objective-c swift nsobject

我的方法最初定义为采用NSString参数,但现在需要能够采用NSString参数或NSAttributedString参数。不幸的是,这些不共享继承层次结构,但每个继承自NSObject。出于这个原因,我修改了方法以获取NSObject,然后检查方法体内参数的类。

这是我想要的。但是,现在我从一些调用方法的快速代码中得到编译器错误:

Cannot convert value of String 'String' to expected argument type 'NSObject!'

我只是开始使用Swift,而这个特殊代码是由其他人编写的。我试图用NSObject(...)在方法调用中包围字符串,但这不起作用。适应这种情况的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

使用as

进行投射

str as NSObjectstr as NSString都可以使用。

示例:

func test(_ s: NSObject) {
    if s is NSString {
        print("it is an NSString")
    } else if s is NSAttributedString {
        print("it is an NSAttributedString")
    }
}

let str = "hello"
test(str as NSObject)

输出:

  

它是一个NSString

答案 1 :(得分:0)

使用as运算符可以解决您当前的问题。

func someFunction(withAnObjectParameter: NSObject!) {
    //...
}

let myString: String = "aString"
let myAttributedString: NSAttributedString = NSAttributedString()

someFunction(withAnObjectParameter: myString as NSObject)
someFunction(withAnObjectParameter: myAttributedString as NSObject)

以下是一些描述其在其他场景中使用的链接:

swift blog

developer documentation