一.swift协议格式
1
2
3
4
|
protocol 协议名 {
// protocol
}
|
1.协议支持属性> 要求声明为变量属性,用var关键字做前缀。
其格式
1
2
3
|
protocol 协议名 {
var 属性名: 类型 { get set }
}
|
2.协议支持方法(普通方法/类方法)与类的普通方法和类方法声明语法相同,只是不用添加实现体
协议是不允许给方法参数指定默认值。
3.协议支持Mutating方法
对值类型实例方法(即结构和枚举),你将可以将mutating关键字放在方法func关键字之前,表明该方法允许修改所属实例和/或实例的任何属性。
4.协议可以组合,但是不会产生新协议格式
1
2
|
protocol<协议1, 协议2,...,协议n>
|
5.协议支持required/optional如果协议是optional协议
二.参考示例。
1.完整示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
protocol QBaseClassProtocol{
var className:String{get}
}
@objc protocol QOutActionProtocol{
optional func gotoPark() ->Bool
optional var goShopping:Bool{get}
}
class QBaseClass :QBaseClassProtocol, QOutActionProtocol{
private var _className:String = "QBaseClass"
init(){
}
//from QBaseClassProtocol
var className:String{
get{
return _className;
}
}
//from QOutActionProtocol
func gotoPark() -> Bool {
return true
}
func test(){
println("className = \(_className)")
var gotoPark:Bool = self.gotoPark()
if gotoPark{
println("I can go to park")
}
else{
println("I can't go to park")
}
/// 'QBaseClass' does not have a member named 'goShopping'
//self.goShopping()
}
}
|
2.调用
1
2
3
|
var baseClass = QBaseClass()
baseClass.test();
|
3.日志
1
2
|
className = QBaseClass
I can go to park
|
三.小结
swift
中协议大体与objective-c
协议相同。主要区别点
-
swift
支持属性,objective-c
而不支持。
文章作者
梵梵爸
上次更新
2014-09-10
许可协议
原创文章,如需转载请注明文章作者和出处。谢谢