在Swift中将字符串转换为NSObject

5
我有一个方法,最初定义为需要一个 NSString 参数,但现在需要接受 NSString 参数或者 NSAttributedString 参数。不幸的是,它们没有共同的继承层级,但每个都继承自 NSObject。因此,我修改了该方法以接受 NSObject,然后在方法体内检查参数的类。
这正如我所希望的那样工作。然而,现在我从一些调用该方法的 Swift 代码中得到编译器错误: Cannot convert value of String 'String' to expected argument type 'NSObject!' 我刚开始使用 Swift,并且这段代码是其他人编写的。我尝试在方法调用中用 NSObject(...) 包裹字符串,但那行不通。哪种方式是适应这种情况的最佳方式?

你能添加一下你正在做的代码吗? - pableiros
这个方法是在Swift中吗?如果是的话,你需要更好的方式来表达"(NS)String或者NSAttributedString"而不是只有一个NSObject参数 - 根据你想要实现的具体目标,可以使用enum或者protocol - Hamish
2个回答

4

使用 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
使用as操作符应该可以解决您的直接问题。
func someFunction(withAnObjectParameter: NSObject!) {
    //...
}

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

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

这里有一些描述其在其他场景中使用的链接:

swift博客

开发者文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接