0%

Swift协议

协议

可选实现

Swift里标记某个方法为可选实现时,需要在协议前添加@objc,并且在可选方法前添加@objc optional.其实也是为了跟OC兼容.
eg:

1
2
3
4
5
6
7
8
9
@objc protocol Iterator {
func first() -> AnyObject?

func next() -> AnyObject?

@objc optional func isDone() -> Bool

func currentItem() -> AnyObject?
}

判断某个实例是否实现了协议里的可选方法:

1
2
3
4
5
if i.isDone?() != nil {
print("\(i) 实现了方法isDone")
} else {
print("\(i) 没实现方法isDone")
}

因为isDone是可选实现方法,所以调用时需要加?,这样就转为optional chaining处理,如果方法的返回值不为nil,则说明对象实现了协议的可选实现方法.

觉得文章有帮助可以打赏一下哦!