Protocol又叫做协定,我们可以透过协定,去让我们的class或struct去遵从这个协定里所规范的东西,假设我们的class里有个func,我如果要改变func的东西,我就要使用override func去重新设定我的func。但是透过protocol我就可以不用使用override。
譬如:
class showUserId {
func showUserId() {
}
}
class User1: showUserId {
override func showUserId() {
print("1234")
}
}
let user1 = User1()
user1.showUserId()
透过我们之前说过的重写,我就可以让使用者1的ID显示出来,但是如果我们忘记重写,就会变成这样:
所以我们为了避免这种情况发生,我们就可以使用protocol,protocol使用方法如下:
class class名称: 第一个Protocol, 第二个Protocol {
//你要做的事情
}
以刚刚的例子来说,用protocol就会变成这样:
protocol userId {
func showUserId()
}
class User1: userId {
func showUserId() {
print("User1的使用者ID为: 123456789")
}
}
class User2: userId{
func showUserId(){
print("User2的使用者ID为: 987654321")
}
}
let user1 = User1()
let user2 = User2()
user1.showUserId()
user2.showUserId()
透过这样我就不用去写override func了,不过有点要注意的是,protocol里面写了什麽,那你的遵从的class里面就要有,譬如:
protocol userId {
func showUserId()
}
class User1: userId {
var userName = "allen"
}
我直接不理protocol里面的func,而是直接在里面做我要做的事,例如宣告一个字串,这样就会报错,既然是协定,我们就要去遵从他,像这样:
protocol userId {
func showUserId()
var height: Int {get}
var userName: String {get}
}
class User1: userId {
var height = 170
var userName = "allen"
func showUserId() {
print("User1的使用者ID为: 123456789")
print("User1的使用者身高为:\(height)")
}
}
class User2: userId {
var height = 168
var wieght = 50
var userName = "tom"
func showUserId(){
print("User2的使用者ID为: 987654321")
print("User2的使用者名称为:\(userName)")
}
}
let user1 = User1()
let user2 = User2()
user1.showUserId()
user2.showUserId()
不管你要在你的class宣告其他额外的东西,只要是遵从protocol的class,里面就一定要放protocol的东西~
如果你有多个protocol,协定跟协定之间只要用逗点隔开就可以了。最常见的例子就是在我们app练习的时候会看到的UIViewController, UITableViewDelegate, UITableViewDataSource的使用。
那如果你有class要继承的话,只要把你要继承的父类别写在protoaol前面并用逗点隔开就好了:
class class名称: 父类别, 第一个Protocol, 第二个Protocol {
//你要做的事情
}
>>: Day-11 Set Associative Cache
前言 Hi, 我是鱼板伯爵在原本的try&catch中我们可以截取大部分的错误,但是这仅能告诉我程序...
今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...
前言 一开始在设计资料库时常常不确定那个 type 要怎麽设,也不知道什麽是 unsigned in...
昨天我们很有胆试的将 VPC 砍掉重建, 为的就是将网段重新安排, 但是还没处理好的部分, 则是 G...
大家好~ 昨天成功在日历上新增 Event 了, 今天来对日历的 Event 做其他操作吧~ Rea...