[IOS Dev] 关于Protocols, Delegate, 和Closures

本文深入探讨了Swift编程中的关键概念——协议、委托和闭包。协议定义了类型所需的方法和属性,不包含实现,可以被类、结构体和枚举遵循。委托模式允许对象间通过协议进行通信,而闭包则是一种可捕获和存储上下文的匿名函数,支持多种简写形式。通过这些概念,开发者可以更好地组织和解耦代码。
摘要由CSDN通过智能技术生成

Protocols

  • protocol定义了完成特定任务所需的method/properties/其他要求
  • protocol中没有实际的implementation
  • 可以被class, structure, enumeration使用
  • 满足protocol要求的type被称为“conform to that protocol”
  • 相当于Java的interface,但java的interface可以有default implementation
protocol Driveable{
	func turnLeft()
	func turnRight()
	func brake()
	//By default, methods are required, unless:
	@objc optional func reverse()
}
class Car : Driveable{
}
//Can adopt more than 1 protocol:
class Bicycle : Driveable, TwoWheels{
}
//If the class has a superclass:
class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
    // class definition goes here
}

Delegation

delegation
一个类比:

  • Protocol: 职位要求
  • Delegator:老板
  • Delegate:实习生小王

老板 (delegator) 把ios开发的任务 (event) 交给实习生小王 (delegate) 完成,因为他知道小王的条件符合职位要求 (conforms to protocol)

Closures

  • 类似于c和objective-c中的blocks,其他编程语言中的lambdas
  • 函数是closures
//Closures: A block of functionality / code
func backward(_ s1:Stirng, _ s2: String) -> Bool{
	return s1 > s2
}

let names = ["Brett", "Eddy", "Hilary", "Sophie", "Ray"]
names.sort(by: backward)

//General Form
names.sort(by: {(s1:Stirng, s2: String) Bool in
	return s1 > s2
})

//First Shortcut: delete type
names.sort(by: {(s1, s2) in
	return s1 > s2
})

//Second Shortcut: remove return keyword
names.sort(by: {(s1, s2) in s1 > s2})

//Third Shortcut: use implied variable name
names.sort(by: {$0 > $1})

//Fourth Shortcut: if closure is the last argument, can remove argument label (trailing closures)
names.sort{$0 > $1}

closures

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值