符合协议的变量,以接受符合协议

时间:2017-07-02 22:48:46

标签: swift swift3

我在Item类中有一个类型为ProtocolItem1协议的变量。我想要做的是能够使用这个类,并在这个变量中保存符合ProtocolItem1协议的对象,这可能吗?我知道在java中你可以创建一个接口,并以这种方式实现它。在目标C中我见过id,请告诉我。

代码:

class Item : NSObject {
    var obj: ProtocolItem1?

    //Other functions and variables
}

class Item2: ProtocolItem1 {
    //variables and methods
}

class OtherClass: UIViewController {
    var dataSource: Item
    //other functions
    override func viewDidLoad(){
       var object1: Item2 = Item2()
       dataSource.obj = object1
    }
}

1 个答案:

答案 0 :(得分:1)

简答:是的。

在Swift中,您可以使用协议类型创建属性。只要符合指定的协议,就可以将任何对象分配给该属性。

以下稍微修改过的代码版本是有效的Swift。

protocol ProtocolItem1 {}

class Item: NSObject {
    var obj: ProtocolItem1?
}

class Item2: ProtocolItem1 {}

class OtherClass: UIViewController {

    var dataSource: Item?

    override func viewDidLoad(){
        let object1 = Item2()
        dataSource?.obj = object1
    }

}