我试图用一些AnyObject类型的属性来定义一个协议,然后在符合协议的类中,属性类型是SomeClass.但是这会返回编译器错误.我不得不将类中的类型更改为AnyObject.如何在协议定义中使用超类并将子类用作属性类型?
谢谢!
protocol TestProtocol { var prop: [AnyObject] {get} } class Test: TestProtocol { var prop = [SomeClass]() //compiler error var prop = [AnyObject]() //this will work }
解决方法
您可以做的游乐场示例:
class SomeClass { } class Subclass : SomeClass{ } protocol TestProtocol { typealias T : SomeClass var prop: [T] {get} } class Test: TestProtocol { var prop = [Subclass]() func test(){ prop.append(Subclass()) } } let test = Test() test.test() print(test.prop) // prints "[Subclass]\n"