// 一,可选链 //可选连的概念 // //它的可选性体现于请求或调用的目标当前可能为空(nil) //如果可选的目标有值,那么调用就会成功; //如果选择的目标为空(nil),则这种调用将返回空(nil) //多次调用被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效。 //可选链的使用 //在可选类型后面放一个问号,可以定义一个可选链。 //这一点很像在可选值后面放一个叹号来强制拆得其封包内的值 //它们的主要的区别在于当可选值为空时可选链即刻失败 //然而一般的强制解析将会引发运行时错误。 //因为可选链的结果可能为nil,可能有值.因此它的返回值是一个可选类型. //可以通过判断返回是否有值来判断是否调用成功 //有值,说明调用成功 //为nil,说明调用失败 //1.创建类 class Person{ var name : String = "" var dog : Dog? } class Dog{ var name : String = "" var toy : Toy? } class Toy{ var price : Double = 0.0 { didSet{ print(price) } } func run() { print("玩具跑!") } } //2.创建对象 let p = Person() p.name = "AOLIU" let dog = Dog() dog.name = "XIAOHuang" let toy = Toy() toy.price = 100.0 //3.让对象产生关系 p.dog = dog dog.toy = toy //4.可选链的使用 //给这个人的狗的玩具赋值一个新值 //p.dog!.toy!.price = 20.0 //可选链: //1.每一个可选类型进行判断,判断是否有值,如果有其中一个可选类型没有值,那么整个表达式返回一个nil //2.如果所有的可选类型都有值,那么整个表达式返回对应的类型,就可以给类型进行赋值 p.dog?.toy?.price = 30.0 //5.取出玩具的价格 //1.判读所有的可选类型是否有值,如果其中一个没有值,则可选链返回一个nil //2.如果可选类型都有值,会返回具体值 //let price = p.dog!.toy!.price let price = p.dog?.toy?.price //取出的是可选类型 let url = URL(string: "") print(url ?? "hahah") //6.调用方法:同上 p.dog?.toy?.run() //7.练习 let btn = UIButton() btn.setTitle("hahah", for: .normal) let title = btn.titleLabel?.text //8.自定义button class MyBtn : UIButton{ override func layoutSubviews() { super.layoutSubviews() // var titleFrame = titleLabel?.frame // titleFrame?.origin.x = 0 // titleLabel?.frame = titleFrame! //oc对象结构体的成员属性不能直接赋值 titleLabel?.frame.origin.x = 0 } } // 二.协议 //协议的格式 //协议的定义方式与类,结构体,枚举的定义都非常相似 protocol SomeProtocol { // 协议方法 } //遵守协议的格式 //class SomeClass: SomeSuperClass, FirstProtocol,AnotherProtocol { // 类的内容 // 实现协议中的方法 //} //1.定义协议 protocol SportProtocol { func playBasketball() func playFootball() } // 2.遵守协议 // 注意:默认情况下在swift中所有的协议方法都是必须实现的,如果不实现,则编译器会报错 class Person1 : SportProtocol { var name : String? var age : Int = 0 // 实现协议中的方法 func playBasketball() { print("人在打篮球") } func playFootball() { print("人在踢足球") } } //代理设计模式 //协议继承用于代理设计模式 protocol BuyTicketProtocol :class {//:class表示这个协议只能是类来遵守 func buyTicket() } class Person2 { // 1.定义协议属性 //weak var delegate : BuyTicketProtocol //为了防止循环使用,使用weak结果不行,swift不能这样使用 var delegate : BuyTicketProtocol//swift中直接使用协议,要想成为代理必须遵守协议 // 2.自定义构造函数 init (delegate : BuyTicketProtocol) { self.delegate = delegate } // 3.行为 func goToBeijing() { delegate.buyTicket() } } class XieCheng: BuyTicketProtocol {//遵守协议必须实现协议方法 func buyTicket() { print("买了一张火车票") } } let p2 = Person2(delegate: XieCheng()) p2.goToBeijing() // 协议中方法的可选性 // 1.定义协议 @objc //表示协议保存oc特性 protocol SportsProtocol { func playBasketball() @objc optional func playFootball() //这个方法是可选的 } // 2.遵守协议 class Person3 : SportsProtocol { var name : String? var age : Int = 0 // 实现协议中的方法 func playBasketball() { print("人在打篮球") } // func playFootball() { // print("踢足球") // } } let p3 = Person3() p3.playBasketball() //p3.playFootball()
-
iOS
89 引用 • 150 回帖
iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。
-
Swift
36 引用 • 37 回帖 • 546 关注
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于