通过Swift学习Objective-C:协议与委托

之前在通过Swift学习Objective-C:变量、类、方法和属性通过Swift学习Objective-C:条件、流程、集合简述了基本的Swift和Objective-C语法转换。这一篇主要讲协议和委托。

协议

声明协议

  1. 协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法
  2. 在任何一个类中,只有声明了协议,都可以实现协议里的方法。
  3. 协议不是一个类,更没有父类了。
  4. 协议里面的方法经常都是一些委托方法。 Swift
    1
    2
    3
    4
    protocol SampleProtocol
    {
    func someMethod()
    }

Objective-C

1
2
3
4
5
@protocol SampleProtocol <NSObject>

- (void)someMethod;

@end

服从协议(Conforming to a protocol)

Swift

1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass: SampleProtocol
{
// Conforming to SampleProtocol
func someMethod() {
}
}

class AnotherClass: SomeSuperClass, SampleProtocol
{
// A subclass conforming to SampleProtocol
func someMethod() {
}
}

Objective-C

1
2
3
@interface MyClass : NSObject<SampleProtocol>

@end

委托(Delegation)

委托,故名思议就是托别人办事。打个比方:

张三迫切需要一分工作,但是不知道去哪找。于是他就拜托(委托)李四给帮找一份合适工作,但是托人办事得给被人好处啊,于是张三给李四塞了一个红包(协议),于是李四通过自己关系在某公司找了一份文秘的工作(实现协议里面委托方法),于然后他把文秘这份工作给了张三,张三就找到工作了;

声明委托属性

Swift

1
2
3
4
class FirstClass
{
var delegate:SampleProtocol?
}

Objective-C

1
2
3
4
5
@interface FirstClass : NSObject

@property (nonatomic, weak) id<SampleProtocol> delegate;

@end

调用委托

Swift

1
delegate?.someMethod()

Objective-C

1
2
if (self.delegate)
[self.delegate someMethod];

参考