我有两个不相关的对象(第三方API),它们具有一些相同的属性。我希望调用一个帮助方法,从属性中提取数据并构建NSDate
对象,但theObject.valueForKey
似乎不起作用。
我已尝试过此功能签名func foo<T: NSObject where T: NSObjectProtocol>(record: T) -> NSDate? { ... }
,但没有运气。
有什么想法吗?
答案 0 :(得分:5)
这是协议的用途:
class ClassOne {
var dateInfo: String = ""
}
class ClassTwo {
var otherDateInfo: String = ""
}
protocol DateBuildingProtocol {
func buildDateFromDateInfo() -> NSDate
}
extension ClassOne: DateBuildingProtocol {
func buildDateFromDateInfo() -> NSDate {
// do something with self.dateInfo
return NSDate()
}
}
extension ClassTwo: DateBuildingProtocol {
func buildDateFromDateInfo() -> NSDate {
// do something with self.otherDateInfo
return NSDate()
}
}
协议为您提供了其他语言所具有的多重继承功能。基本上你声明了一个两个类都应该有的方法,并在每个类上实现该方法以使用你需要的特定变量。
答案 1 :(得分:1)
如果您只想获得一个适用于这两个类并公开公共属性的类型,您可以使用协议并使用扩展来实现协议:
class Foo {
let name = "foo"
}
class Bar {
let name = "bar"
}
protocol HasName {
var name: String { get }
}
extension Foo: HasName {}
extension Bar: HasName {}
func getName(x: HasName) -> String {
return x.name
}
getName(Foo()) // "foo"
getName(Bar()) // "bar"