在Swift中从不同类调用相同的属性?
如果我有两个显式类,它们都具有相同的属性名,有没有一种方法可以调用该属性而不必定义我使用的是哪个类在Swift中从不同类调用相同的属性?,swift,Swift,如果我有两个显式类,它们都具有相同的属性名,有没有一种方法可以调用该属性而不必定义我使用的是哪个类 class firstClass { var name = “Name” init….. } class secondClass { var name = “Another name” init…. } now another function can call //does not work... I get an error saying AnyO
class firstClass {
var name = “Name”
init…..
}
class secondClass {
var name = “Another name”
init….
}
now another function can call
//does not work... I get an error saying AnyObject doesn't have property
func printNameOf(object: AnyObject) {
println(object.name)
}
//works but my software has a lot of classes, which means a ton of code
func printNameOf(object: AnyObject) {
if object is firstClass {
println((object as firstClass).name)
}
if object is secondClass {
println((object as secondClass).name)
}
}
您可以通过创建两个类都符合的协议来实现这一点:
protocol NameProtocol {
var name: String {get set}
}
class firstClass: NameProtocol {
var name = "Name 1"
}
class secondCLass: NameProtocol {
var name = "Name 2"
}
func printNameOf(obj: NameProtocol) {
// You know obj has property name
println(a.name)
}
如果我使用的是苹果提供的使用任何对象的函数呢?这可能吗?printNameOfobj:AnyObject而不是printNameOfobj:NameProtocol假设您可以更改类,您仍然可以使用协议,然后在我假设您实现/重写的函数中,您可以只检查一次AnyObject是否是NameProtocol。