我的方法最初定义为采用NSString
参数,但现在需要能够采用NSString
参数或NSAttributedString
参数。不幸的是,这些不共享继承层次结构,但每个继承自NSObject
。出于这个原因,我修改了方法以获取NSObject
,然后检查方法体内参数的类。
这是我想要的。但是,现在我从一些调用方法的快速代码中得到编译器错误:
Cannot convert value of String 'String' to expected argument type 'NSObject!'
我只是开始使用Swift,而这个特殊代码是由其他人编写的。我试图用NSObject(...)
在方法调用中包围字符串,但这不起作用。适应这种情况的最佳方法是什么?
答案 0 :(得分:1)
使用as
:
str as NSObject
或str 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)
以下是一些描述其在其他场景中使用的链接: