// MARK: - 协议(protocol)
// 当Swift中声明协议的时候,协议里有可选方法需要使用@objc关键字修饰
@objc protocol MarryDelegate{
func cook() // 做饭
func wash() // 洗衣服
optional func hitDouDou() // 打豆豆.可选方法
}
protocol DivorceDelegate{
func divisionProperty() // 分割财产
}
// 先写继承的类,然后再写要遵守的协议
class Man:Person,MarryDelegate,DivorceDelegate {
@objc func cook() {
print("做饭")
}
@objc func wash() {
print("洗衣服")
}
func divisionProperty() {
print("分财产")
}
}
var man:Man = Man(name: "ad", age: 23)
man.cook()
man.wash()
man.divisionProperty()
// MARK: - 扩展(Extension)
// 1.扩展协议中的相关方法
extension Man {
@objc func hitDouDou() {
print("dsadasdas")
}
}
man.hitDouDou()
// 2.扩展还可以扩展类方法(给某一个类添加方法,类似于OC中的Category)以及对象方法
extension Man{
// 扩展一个对象方法
func sing(){
print("唱歌")
}
// 扩展一个类方法
class func play() {
print("玩")
}
}
man.sing()
Man.play()
// MARK: - 闭包
// 求两个数的最大值
/*
在OC中使用Block实现
int (^myBlock)(int num1, int num2) = ^int(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
*/
// 使用闭包
var myBlock : ((num1:Int,num2:Int)->Int)
// 第一种使用方式
myBlock = {
(num1:Int, num2:Int) -> Int in
return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 3, num2: 6))
// 第二种方式
myBlock = {
num1,num2 in
return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 7, num2: 6))
// 第三种方式
myBlock = {
num1,num2 in
num1 > num2 ? num1 : num2
}
print(myBlock(num1: 10, num2: 22))
// 第四种方式
myBlock = {
$0 > $1 ? $0 : $1
}
print(myBlock(num1: 10, num2: 22))
// 第五种方式
myBlock = {
(num1,num2)->Int in
return num1 > num2 ? num1 : num2
}
print(myBlock(num1: 99, num2: 66))
// 在第二个视图控制器创建返回按钮
var block = {
(str:String)-> Void in
}
override func viewDidLoad() {
super.viewDidLoad()
// 创建返回按钮
let button: UIButton = UIButton(frame: CGRectMake(10,100,50,50))
button.addTarget(self, action: Selector("buttonAction"), forControlEvents: UIControlEvents.TouchUpInside)
button.setTitle("返回", forState: UIControlState.Normal)
button.backgroundColor = UIColor.c