swift3.0 后基础语法 / 变化 - 可选链和协议 四

本贴最后更新于 3053 天前,其中的信息可能已经时移世异
//      一,可选链 //可选连的概念 // //它的可选性体现于请求或调用的目标当前可能为空(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

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 546 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 1 关注
  • Access
    1 引用 • 3 回帖 • 2 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 3 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 4 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 614 关注
  • 996
    13 引用 • 200 回帖 • 6 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 81 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 62 关注
  • V2Ray
    1 引用 • 15 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 757 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    199 引用 • 542 回帖
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 647 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 5 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    58 引用 • 25 回帖 • 2 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 641 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    184 引用 • 1018 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 249 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 3 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 32 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    336 引用 • 324 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    412 引用 • 3588 回帖 • 1 关注
  • CodeMirror
    2 引用 • 17 回帖 • 162 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 181 关注