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

在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开发的技术热点内容!

移动周报:最火原型设计工具盘点 “京东电商云”起航,零售企业及品牌商是重点 教育乃立国之本:教育类开源项目大汇集 Hugo Barra首度谈离开谷歌后在中国工作的感受 对中国赞不绝口 母婴行业最早试水者 优谈宝宝借助轻应用全面布局移动产品线 腾讯云平台部总经理纪顺友:微云将彻底迈过文件传输的门槛 豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 怎样把一个 Frame 窗体放进一个Penal 中??? 我编了4年程序,可是我在这里的提问没有一个人的回答让我满意!!!! 搞张jbuilder6破解? 特殊字符串查找 请问Win2k pro的Inetinfo.exe进程怎么占用CPU达99%呀?怎么解决呢? 自由自在的人,你在吗? 后缀是nlc的电子图书那里找? 请问vc里缺省参数的函数是怎么定义的?(70分) 救救我!!!数据库管理的几个基础问题?? 急需控件 请教一个关于CListCtrl的问题??? c语言实现"智力游戏" --? Redhat下设置环境变量 我的帐号被盗了啦!!!!!!! select max(count(*)) from table group by aa这个意思的语句该怎么样写? 在SQL SERVER7.0中如何实现类似于ORACLE中的CONNECT BY实现的树型查询? 这里都是些菜尿,吗的没有一次我的提问有人给我解决的! 为什么我的问题没人响应???????? 隐藏FORM的API,谁能提供? 谁知道 jdbc-odbc数据库连接是否要装jdbc程序 哪位大峡知道MetaTools公司的Photo Soap下载网址??? 数据库打开问题? 为什么会出现 Capability not suported???? 请教高手们一个在天极网没人能回答的问题,认真做答者有分 jsp的中文问题求救 何為數據流? 为什么在保存Word文档时总是提示Word内存不足,不能保存? 谁有开发支付网关的经历,请介绍一下经验,或提供些资料给我参考,谢啦。 求救!关于怎样提交表单???? 怎样写入txt文件里 alphagx送分了 求教: delphi中 JPG图片怎样存入数据库中的BLOB字段?怎么进行VCD文件分割或存入BLOB字段? 有关ICMP重定向报文的疑问!!! 在C++Builder中调用计算机内置扬声器,声音太轻了,怎样提高音量? 一个头痛的问题!大家指教! lujun,icevi……快来看看这个数据库怎么设计 请问怎么才能让DataSource.SaveToContainer不使用GUID作为邮件名称 怎么拒绝MM。 请教:为什么对话框的背景色没改变? 请问CDO中有什么方法可以不用邮件url而使用DAV:id来获得制定的邮件 FALSH问题?来者有分!(300) 一个关于头文件的问题. 简单问题001 有人在windows下写过数控程序吗? 有关sqlserver2000数据倒入问题 我是个新手,请大家多帮忙!有个问题请教:如何传递数组参数?急!!多谢多谢 如何将float转化成CString? 我的C盘太小了,v7.0装不上,pqmagic不支持win2000!听说配置好VC6.0,其能运行C#?? 隐藏FORM的API函数,请提供。 求经!!!各位PERL程序员!我不会PERL可否三天内把一个ASP的程序转为PERL!!!! 请问怎么在Unix上用JSP建立.xls的文件,并进行内容的读写?谢谢! 求一篇作文题目是“成长,需要快乐”的作文,500字,不要太好的 那天,我捡到了快乐的钥匙 听说现在太阳离地球越来越近,月亮离地球越来越远? 我成长,我快乐 450字作文 由悲伤转为快乐的作文题 目 地球离太阳是越来越近还是越来越远? 成长的快乐(400字) 关于“快乐的校园生活”的作文题目稍微新颖一点 有诗意一点还有4个小标题 分别是关于“军训”“野炊”“合唱”的 形式要一致一定要关于快乐的!说错了 是3个小标题 月球离地球越来越远,是不是地球离太阳也越来越远? 81个月球才和地球一样重,月球的质量是地球质量的几分之几? 我和书的故事 作文600字 太阳离我们越来越近,月球离我们越来越远了吗?不知是否有人注意了现在感觉太阳离我们越来越近,而月球离我们越来越远了…… 不知道是地球运动的变化还是太阳或是月球?我记得小时候肉 世界上的四大海洋是什么? 世界四大强国是指哪些国家?请主要说一下综合国力的排名. 月亮为什么离地球越来越远?在《宇宙与人》里说,月球与地球越来越远! 81个你才和我一样重,月球的质量是地球的质量的几分之几. 世界面积第四大的国家是哪个?213 如何做一个合格的中学班干部 作文 世界上的四大海洋是哪四个 世界上面积第四大的的国家是哪个? 我要竞选班干部的作文我竞选的是纪律委员 地球对月亮说81个你才和我一样重.月亮的质量是地球质量的几分之几? 中国是世界第四大旅游国,那么前三个国家是哪三个国家? 成长故事作文400字 四大海洋哪个海洋最大 世界四大寓言是什么?(些写出哪个国家的)! 成长故事作文 400字 急 明天要交的 81个月球的质量相当于一个地球的质量,月球的质量是地球质量的几分之几?小明用15分钟走了1千米,平均每分钟走几分之几千米? 求种族灭绝的英语文章 300字左右 月亮离地球远还是太阳离地球远 跪求一篇300字的记事好作文饿- -拜托大家了 真的很急 必须是记事作文哦 今天晚上就要饿- - 世界四大海洋面积最小的是 急求英语300字美文三篇!老师要我们翻译, 求一篇记事作文,300字左右 四大奇迹海洋是哪几个?sj的宝蓝海洋东方神起的红色海洋还有呢? 如果要你写一篇作文题目是什么什么的滋味.你会用什么的滋味 求!寒假叙事作文300字!啊!要够300字啊!各位求求了!谢谢各位! 快乐的春节500字 解释“成长的味道”这个作文题的含义.有这么一个题目——以“成长的味道”为话题,写一篇800字左右的作文,我想要知道的是,从“成长的味道”这个话题,还可以引申出哪方面内容?除去“酸 急需三篇450字作文内容任意,块! 快乐春节故事作文600字急 作文题:初夏_______的味道要有大致的框架,最好是和足球有关的 冬天里的故事作文500字 家乡的春节500字 世界上有三大无酒精饮料,你知道是哪三种吗? 我家的教育故事作文500字, Good morninng,ladies and gentelmen.Now,there is a girl who has a dream to be an international politician wishes to share her dream and hobbies with you.My name is….,charlotte skywalker.You may recall the surname skywalker was in the movie_---stars 地球离月球远还是离太阳远? 求世界四大姓! 太阳离地球近?还是月亮离地球近呢?脑筋急转弯! 火星,月球,地球,谁离太阳近 世界四大水果是哪几种? 太阳离地球近还是月球近 一篇关于中国的环境问题的文章 要英文的急需一篇关于中国环境问题的英文文章 是高一新生的阅读范围 请各位帮帮忙啦``````` 世界四大特务组织 什么样的作文题目可以写一件快乐的事? 根据这个写个300字的英文短文挺急的 拜托了In the western world, if a family member has got a cancer, his/her family members must tell him/her about it frankly. If not, it would be regarded illegal. But in Chinese culture, a common pra 成长中的快乐作文450字不许转载,嘻嘻…… 关于快乐的作文题目我的作文主要是写爱,通过爱来表达快乐.这样以快乐为话题是不是有些违背.顺便帮我加个好的题目 求有关环境问题的英文文章文章不用太长,2 3段话就好内容就是最近最热的环境问题单词量在高中到4级左右
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn