说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Swift中,如何像Objective-C定义可选接口?

HTML文档下载 WORD文档下载 PDF文档下载
原生的Swift protocol里没有可选项,所有定义的方法都是必须实现的。如果我们想要像Objective-C里那样定义可选的接口方法,就需要将接口本身定义为Objective-C的。在本文中,喵神王巍分享了Swift的可选接口。

Objective-C中的protocol里存在@optional关键字,被这个关键字修饰的方法并非必须要被实现。我们可以通过接口定义一系列方法,然后由实现接口的类选择性地实现其中几个方法。在Cocoa API中很多情况下接口方法都是可选的,这点和Swift中的protocol的所有方法都必须被实现这一特性完全不同。


那些如果没有实现则接口就无法正常工作的方法一般是必须的,而相对地像作为事件通知或者对非关键属性进行配置的方法一般都是可选的。最好的例子我想应该是UITableViewDataSource和UITableViewDelegate。前者中有两个必要方法:

-tableView:numberOfRowsInSection:-tableView:cellForRowAtIndexPath:

分别用来计算和准备tableView的高度以及提供每一个cell的样式,而其他的像是返回section个数或者询问 cell 是否能被编辑的方法都有默认的行为,都是可选方法;后者(UITableViewDelegate)中的所有方法都是详细的配置和事件回传,因此全部都是可选的。

原生的Swift protocol里没有可选项,所有定义的方法都是必须实现的。如果我们想要像Objective-C里那样定义可选的接口方法,就需要将接口本身定义为Objective-C的,也即在protocol定义之前加上@objc。另外和Objective-C中的@optional不同,我们使用没有@符号的关键字optional来定义可选方法:

@objc protocol OptionalProtocol {    optional func optionalMethod()}

另外,对于所有的声明,它们的前缀修饰是完全分开的。也就是说你不能像是在Objective-C里那样用一个@optional指定接下来的若干个方法都是可选的了,必须对每一个可选方法添加前缀,对于没有前缀的方法来说,它们是默认必须实现的:

@objc protocol OptionalProtocol {    optional func optionalMethod()  // 可选    func necessaryMethod()          // 必须    optional func anotherOptionalMethod() // 可选}

一个不可避免的限制是,使用@objc修饰的protocol就只能被class实现了,也就是说,对于struct和enum类型,我们是无法令它们所实现的接口中含有可选方法或者属性的。

作者:王巍(@onevcat),iOS和Unity3D开发者。

本文转载自:Swifter

点击链接进入Swift技术社区,了解更多Swift开发的技术热点内容!

集群管理可以很简单,Google又放大招 应用内直接打车:Uber面向第三方开发者开放API 百万美元巨奖!英特尔启动感知计算挑战赛 IBM 2014技术峰会在京开幕! OpenGL 4.5规范标准发布,大大提升API性能! 更萌更贱:Flappy Bird开发者推虐心新作Swing Copters 学习的革命:AR增强现实遇到儿童应用 颠覆旧概念,IBM Bluemix开启云开发时代 专访企业QQ SaaS团队,谈企业级LNMP架构设计 《近匠》Coding:将软件开发搬到云上 小米与美视频游戏服务Ouya合作 进军国内客厅 新工具Get!轻松实现2D画面动态光影的Sprite Lamp 一周消息树:罗升阳的Android之旅 手游不易:GungHo 3.44亿美元售Supercell股权 周末去哪儿 当然是去2014微信开发者大会!(附参会提醒和名单) 开源框架Ember.js迎来1.7.0和1.8 Beta 1更新 《近匠》RealSense:几行代码,为游戏添增实感交互 MDCC游戏应用征集关键词:中小团队,3D,转型,IP 共话HealthKit:能否颠覆医疗保健生态系统? Perception Neuron系统,让动作捕捉技术不再高冷 2014年DevOps实践调查报告 .NET程序性能的基本要领 百度手机卫士宣布开放三大能力 构建互联网安全生态 火速围观,AMD APU新芯片架构A68H呼之欲出! 对于测试人员而言,TDD意味着什么? 年用电910亿度,那些庞大的数据中心该用什么支撑 走近黑客们的世界,感受网络空间的心跳 VMworld 2014 Day One:Docker、数据中心、混合云新举措 Docker和Kubernetes或将加速SDN发展 前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js 【CTO俱乐部读书会】《流程的永恒之道》辛鹏:企业的本质就是流程运营 怎样在TStringGrid的整个框内绘图,而不是在某个单元中绘图? WEB安全认证问题 TO: neweb(永不言败) 请问各位大虾,哪里有jdk1.3 for linux SPARC 版本 求救!硬盘坏了! 晨昏三灌水,早晚一个屁 怎么在EXCEL中用VBA控制图表的位置? Delphi确实很好,学了好几年了,但在上海差点没有找到工作,很少有招学Delphi的 关于 VC 6.0 有没有什么补丁,升级文件之类的东西? 高分争解 怎么利用Jsp发邮件? 有谁知道光驱加锁的问题 parodox数据库问题 各位平时用 VC 作东西,都用那些辅助工具?  高分争解 【 http://www.esoftware.com.cn/search.php?condition=%BA%AB%C1%F7%C0%B4%CF%AE&page=1&mode=3 】 JBuilder的使用问题 在VFP中,编程执行SQL语句时,怎样使系统的查询结果不出现? 一个程序流程的问题 为什么当我的SpeedButton的enabled为false时,上面的图标就没有了? 囡囡(baicolt)请进,问你一点事情 简单问题,请赐教 高分相赠!!!:操作系统和SQL SEVER2000都是英文版,用VB连接如何可以正确的输入和显示中文? 则么在程序中得到sql的存储过程的返回值? 请问 VB 6.0 有没有最新的升级文件之类的东西?高分争解 谢谢 谁有用java做的复杂一点的图行界面的例子 网管来看看,为什么不能给分了!右边的文本框又不见了! 各位用 VB 编程都用那些辅助工具? 高分争解 关于ShellExecute 装了redhat7,在/etc里没有inetd.conf文件,谁见过这咋整 菜鸟请教大侠!很急!谢谢!!只有10分对不起! 请问一个关于CLASSWIZARD 的问题 这里有PB反编译程序,你信吗? 怎样解 关于大数据量的问题,经验丰富者里面谈! 我想在程序里控制程序外的浏览器窗口资源管理器窗口,怎么做呢?急呀!!!!!! 请问:我用JavaMail收下的邮件主题,发信人姓名不能正常显示。。。。。 认识我的人都进来跟我聊聊吧,我最近新换了工作,还没有适应,你们各位是怎么换工作? 请问如何在Delphi中表示二进制,或者十六进制数呢? 各位35以后干什么?我们能干什么? ????? 如何将eltree中的数据和某数据表关联 有没有比RECORDCOUNT快的方法实现同样的功能? 鉴于目前有些东西说话不知轻重,把这个旧闻再贴一遍,不要以为真的在网上 “没人知道你是一只狗” Java 工具 怎样解决vb中编译成exe文件中出现的问题? 你别说国企,只要是沾的国企的气味就他妈的黑! api函数我不懂。 我要开发一个网络监听的程序,捕获所有以太网中所有的帧,象NT和Win2000中的网络监视器一样 找了半天,看不到一个熟人,认识的过来报到 请问哪里有下载jdk啊? 问题征集算法 偶烦!偶郁闷!咿呀~~~~~~~~老哥进来安慰偶。。。。快!快!快!!! 在ListView中,如何象Windows资源管理器那样将剪贴了的文件图标变虚? 化学粗盐提纯除 泥沙 硫酸盐 MgCl2 CaCl2的步骤及现象 对于反应:CAH2+2H2O=Ca(OH)2+2H2电子转移是怎么样的?为什么氢化钙中的H一定与H2中“配对”搭双线桥就不能与氢氧化钙中的H搭双线桥? 制取乙酸乙酯的化学反应方程式? 如果要除去粗盐中含有的可溶性杂质CaCl2(氯化钠),MgCl2(氯化镁)及一些硫酸盐,按下表所示顺序,应加入什么剂 CAH2+2H2O=Ca(OH)2+2H2 这个反应解释一下!为什么不是全部水中的氢来产生氢气,而有氢化钙来提供一部分就是为什么只有1个h2o来还原?详细点啊! 工业制取漂白粉的化学方程式? 粗盐中含可溶性CaCl2,MgCl2及一些硫酸盐粗盐中含可溶性CaCl2、MgCl2及一些硫酸盐除去这些杂质的试剂可选用①Na2CO3、②NaOH、③BaCl2、④ HCl 加入的先后顺序可以是 A①②③④ B②③①④ C②①③ 对于反应:CAH2+2H2O=Ca(OH)2+2H21,H2只是氧化产物 2,H2只是还原产物 3,H2O是氧化剂 4,CAH2中的氢元素被还原 5,此反应中氧化产物和还原产物的分子数之比是1:1.上述正确的是( )A 1 4 5 B24 C1 D 3 5 制取四氧化三铁的化学反应方程式 除杂:Na2SO4,MgCl2,CaCl2,如果用BaCl2,NaOH,NaCO3除,最后不是还有Ba离子吗?那应该怎么才可以完全除去就按照这个顺序除 氢化钙(CaH2)固体是登山队员常用的能源提供剂,用它和水反应生成的氢气供燃料之需,该反应同时还生成氢氧化钙.现有87.5氢化钙与足量水反应,可生成多少8克氢气,求氢化钙样品中氢化钙的 工业制取Cu2O的方法以及相关化学反应方程式 6.粗食盐中常含CaCl2、MgCl2、Na2SO4等杂质,需按一定顺序加入NaOH溶液、Na2CO3溶液、 BaCl2溶液和盐酸(A.Na2CO3、BaCl2、NaOH、HCl B.NaOH、BaCl2、Na2CO3、HCl C.BaCl2、NaOH、HCl、Na2CO3 D.BaCl2、Na2CO3、HCl 氢化钙(CaH2)固体是登山队员常用的能源提供剂,用它和水反应生成的氢气供燃料之需,该反应同时还生成氢氧化钙.现有87.5氢化钙与足量水反应,可生成多少克氢气 和体积 氢化钙CaH2与冰反应放出氢气,生成对应的碱.(要化学方程式)(生成的碱沉淀吗?) 用海带为原料制取少量碘水,现用CCI4从碘水中萃取碘并用漏斗分离两种溶液,实验过程操作如下:A:把盛有溶液的分液漏斗放在铁架的铁圈中;B:把500ml碘水和15mlccl4加入分液漏斗中,并改好玻 粗盐的除杂 杂质Na2SO4,MgCl2 试剂 Na2CO3,NaOH,BaCl2,HCl 答案是BaCl2,NaOH,Na2CO3,HCl既然Na2CO3也可以沉淀MgCl2,那加NaOH不是可以去掉吗? 氢化钙(CaH2)固体是登山运动员常用的能源提供剂,它与水反应生成氢气供燃烧之需,化学反应方程为:CaH2十2...氢化钙(CaH2)固体是登山运动员常用的能源提供剂,它与水反应生成氢气供燃烧之需,化 我做实验时,为什么煮得的提取液是浓浓的黑色(像煲中药似的)?反复过滤后仍无法得到澄清透明的液体?海带的用量过多会有影响吗? 粗盐有MgCl2,CaCl2,Na2SO4用NaOH,Na2CO3,BaCl2过量之后加适量盐酸除去,为何氯化钡要放在碳酸钠之前? 登山队员常用的能源是氢化钙(CaH2)固体,它和水反应生成氢氧化钙和氢气(CaH2+2H2O═Ca(OH)2+2H2↑),求氧化钙中钙、氢元素的原子个数之比为?氢元素的质量份数为?(精确到0.1%) 如何用化学的方法从海带中提取碘 过滤后的食盐水仍含有可溶性的CaCl2、MgCl2、Na2SO4 等杂质,通过如下几个实验步骤,可制得纯净的食盐水:① 加入稍过量的Na2CO3溶液;② 加入稍过量的NaOH溶液;③ 加入稍过量的BaCl2 溶液;④ 登山队员常用的能源物质是氢化钙(CaH2)固体,用它和水反应生成氢氧化钙和氧气,氢气供燃烧之需.(1)写出氢化钙和水反应的化学方程式(2)写出氢气燃烧的化学方程式 为了除去粗盐中的CaCl2,MgCl2,Na2SO4及泥沙等杂质,某同学设计了一种制备精盐的实验方案,如图:1.在第4步和第六步中,写出所有反应的方程式2.判断BaCl2已过量的方法: 过滤后的食盐水仍含有可溶性的CaCl2、MgCl2、Na2SO4 等杂质,通过如下几个实验步骤,可制得纯净的食盐水:① 加入稍过量的Na2CO3溶液;② 加入稍过量的NaOH溶液;③ 加入稍过量的BaCl2 溶液;④ 金属钙与水反应方程式急啊-------要准确的! 如何除去粗盐中的可溶性杂质CaCl2,MgCl2,Na2So4等,得到较纯的食盐?加入的顺序为BaCl2、NaOH、Na2CO3 为什么是这个顺序? 除去食盐中的CaCl2,MgCl2,及Na2SO4,可否按照,1,BaCl2;2,Na2CO3;3,NaOH;4,HCl的顺序进行?如果不行,why? 钙单质和水反应的化学方程式 如何提纯含泥沙、MgCl2、CaCl2、Na2SO4的粗盐为原料提取NaCl的固体的工艺流程图 急用 一氧化碳的物理性质为?化学性质为?煤气是一种重要的燃料,它的主要成分是一氧化碳,煤气是一种没有颜色、没有气味的气体,日常生活中为了防止煤气中毒,常在煤气中加入少量有强烈 氧化钙与水反应的化学方程式 如何除去NaCl中所含的Na2SO4、MgCl2、CaCl2按顺序写出所加试剂及相应的方程式. 求一氧化碳的物理性质四条和化学性质两条~ 写出过氧化钙与水反应的化学方程式.[过氧化钙CaO2]要配平.过氧化钙与水反应生成氢氧化钙与氧气。 怎样除去粗盐中的Mgcl2和Cacl2啊? 一氧化碳具有什么特性 生石灰与水反应的化学方程式 氯化钠是日常生活的必需品,也是重要的化工原料.(1)粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质.以下是粗盐提纯的操作流程.提供的试剂:Na2CO3溶液、K2CO3溶液、NaOH溶液、BaCl2 一氧化碳具有还原性,是什么变化性质(物理, 氧化钙与水反应的化学方程式及现象 氯化钠是日常生活的必需品,也是重要的化工原料..在滤液中加盐酸的作用是( ).1)粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质。以下是粗盐提纯的操作流程。提供的试剂:N 一氧化碳具有还原性是什么性质(物理还化学) 过氧化钙与水反应的化学方程式是什么? 食盐是日常生活的必需品,也是重要的化工原料.粗食盐常含有少量K+、Ca2+、Mg2+、Fe3+、SO42-等杂质离子,实验室提纯NaCl的流程如下按滴加顺序依次为Bacl2,NaoH,Na2CO3.为什么Na2CO3要最后滴加?放在Bacl 一氧化碳具有还原性质么? 氢化钙的制备装置图 (2011•津南区一模)氯化钠是日常生活的必需品,也是重要的化工原料.粗盐除含NaCl外,还含有少量MgCl2、CaCl2、Na2SO4以及泥沙等杂质.以下是粗盐提纯的操作流程.提供的试剂:Na2CO3溶液 一氧化碳和二氧化碳有什么共同性质 氢化钙取氢气的好处生活中为什么不用这种方法制取氢气 如何除去NaCl中的MgCl2和CaCl2? 塑料饮用瓶的形状包含了哪些科学道理? 金属氢化物是如何制备的?如氢化钠,氢化钙 要除去粗盐中含有的杂质cacl2、mgcl2及一些硫酸盐,所加试剂顺序可以颠倒吗?书上是先加bacl2,然后naoh.最后na2co3. 塑料饮料瓶的形状设计包含哪些科学道理? 氯化铵和氢化钙反应生成什么气体? 高一化学必修一第一单元粗盐中含可溶性CaCl2、MgCl2及一些硫酸盐,除去这些杂质的 塑料饮料瓶的形状设计包含着哪些科学道理小学六年级上第二单元一课找拱形课文,要根据课文内来回答,不要太扯远,注意是“形状”包含的科学道理哦. 生产轻质碳酸钙的化学反应方程式
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn