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

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

看Go桌面技术副总,如何解读Facebook Home 增长最快的游戏公司Supercell 你学得会? 移动周报:为什么我们出不了IT神童? AWS、VMware和OpenStack谁是赢家? 消息称苹果正在寻找新任CEO取代库克 请别人云亦云 PC仍然重要且活得很好 比预想晚几年!IBM x86服务器或终将卖给联想 App推广的节操呢? iMessage垃圾短信产业链暗访 Apkudo CEO访谈:免费为Android开发者提供测试 Web API核查表:设计、测试、发布API时需思考的43件事 开源Android构建工具Buck 速度超Ant两倍 从史上八大MySQL事故中学到的经验 OpenStack Heat向应用市场更近一步 初创公司Ionic Security:云安全必须与时俱进 谷歌董事长:一年后消费者才能用上Goolge Glass Windows 8.1重新推出的“开始按钮”毫无意义 手眼并用 代码泄露三种Google Glass手势操作 Google新论文 CPI&#178;:基于Linux的世界级跨数据中心服务器CPU监控 20款非常实用的Web工具和资源列表 数据库界大事件 随机写性能巨好的TokuDB开源了 CMDN Club 26期:数字渠道营销主题沙龙 暴强:用iOS设备控制的HTML5“小蜜蜂”游戏 Leap Motion:500元体感,精确到0.01毫米 大事件:三大运营商将发布融合计费SDK 再培养一个扎克伯克:六款适合儿童上手编程的App 首届中国软件工程标准高峰论坛:软件开发的新机遇与挑战 Verizon研究显示:中国成为2012年度网络间谍攻击的主要来源 Clang宣布全面支持C++11标准 北大陈钟:SEMAT—中国软件工程发展的新机遇 超华尔街预期:苹果第二财季营收为436亿美元 跨平台游戏引擎Spaceport已被Facebook收购 有谁能够告诉我有关网站发展历史的资料么?世界上第一个网站是怎样建成的?以后的发展脉络呢?如果有谁能够相告不胜感激啊。 讨论:可视化开发XSLT的工具!! 如何使用VC进行“毫秒级”以下的 定时器。即(xx uS 的定时器)。。。。。。。。。。。。 看电视(转载) jsp比asp,php等好么?(在线等候) 怎样实现图像的自动拼接? 报表输出问题 我用ActionManage做出的菜单为何汉字显示总是最后一个字少半边? c#里如何使用shbrowseforfolder?那位兄弟给个例子 如何实现MAC和IP绑定。 帮帮我啊,老大们我真的很急谢了 session问题?????? 报表输出问题 你愿意吗? 关于PB中做VFP的ODBC的一个问题 我为什么不能提问? 在PASCAL语言中的"集合"概念,转化到C语言中,该怎么实现? 帮我看一下这个程序. 谁人发个QB的编辑器给我? 如何改变应用程序的图标 网吧管理 帮我看一下这个程序. 谁看谁头疼的问题!你除外! 请问JDK和J2SDK有什么区别? win98 转 win2000出现的问题,急,再线等候! 停止函数执行 请问如何在鼠标点击xx button 的时候获得 JtextField 中的文本输入--有重分送 我不能关机了!救救我哟~~给你分! tomcat4.0.1无法启动的问题 SoS!俺用fireworks做了一套菜单,但是应用于框架结构中时,只显示菜单所在框架的部分菜单。也就是说菜单显示不完整,如何能够让菜单跨越 刚装了REDHAT 7.2,不知道网络怎么设置 报表打印,望各位指点..... 是不是我这里设错了? 菜鸟有问题,Win2k的定时关机程序 关于天数累加的问题 webbrowser控件问题? 421连续进纸标准,打印问题,难啊,难 有个小问题难住偶了! 请教 bdf 文件的格式 在JPrint中如何设置页面的打印范围(不使用打印机的默认打印范围),找不到例子,那位能够给个实例。。。 开发jsp需要什么环境和安装软件,目前版本为多少? 在PASCAL语言中的"集合"概念,如何转化成C语言表示 怎么回事。formshow 不能写太多sql语句么〉?,怎么不显示?大家快帮看看,急死了 自动累加的问题?(100)我只能给这么多了 哪里可以下载powerbuilder7.0 网页自动累加的问题(100) help 求肋!! 有关SUN WORKSTATION OPENBOOT的问题 请问一下vb6和.NET 请问,如何用flash 做一个网页“访问量统计”计数器? 请问在win98繁体下开发的pb源程序,在简体win98下怎样转过来?急,请帮忙! 如图,在以O为圆心的两个同心圆中,AB经过圆心O,且与小圆相交于点A,与大圆相交于点B,小圆的切线AC与大圆相交于点D,且CO平分∠ACB.(1)试判断BC所在直线与小圆的位置关系,并说明理由;(2) 用狐狸,小山羊和小白兔. 机械图纸的尺寸标注,在标注数字前面有个圆圈,圆圈里面有个QC,rt24.5是全长尺寸,在24.5前面有个符号,这个 如图,在以O为为圆心的两个同心圆中,AB经过圆心O,且与小圆相交于点A,与大圆相交于点B.小圆的切线AC与大圆相交于点D,且CO平分∠ACD.(1)试判断BC所在直线与小圆的位置关系,并说明理由.(2) 用小白兔,胡萝卜和山羊编童话故事 500字 CAD2012标注半径时出现的是:半径的尺寸、直径的符号, 角铝规格6*60*60,长度是2636,怎么计算价格啊? 40(?)+20(?)=1(?)填单位! 3( )+4( )=1( ) 填数学单位,使等式成立.比如:1(斤)+1(斤)=1(公斤) 刺猬汉斯是-----国作家-------写的————(体裁)我还读过他们其他的童话,有,< > 《 》《 》等. 一棵树高20( )填单位 一个山羊撞树,一个刺猬拿苹果 5年级看图写作文(500)二楼的,太那个了 刺猬汉斯的主要内容是什么? 若二次函数y=f(x)的图像经过原点,且1≤f(-2)≤2,3≤f(1)≤4.求f(2)的取值范围 果园有桃树100棵,比苹果树多1/4,苹果树是x,列出方程,并求出苹果树. 刺猬汉斯讲了几件事,都什么事? 分米的英文符号是什么? 5棵苹果树产苹果a千克,照这样计算,100棵苹果树产苹果多少? 《刺猬汉斯》是《格林童话》写的. 改病句 若已知二次函数y=f(x)的图象过原点,且1 地球赤道上的物体和同步卫星的周期为什么相等?地球赤道上的物体不是忽略离地高度,同步卫星要计算离地高度吗? 刺猬汉斯帮我分段啊! 分米的符号怎么表示? 为什么同步卫星和地球上的物体半径不同,周期却相同 会计判断题 1.“短期借款”账户不核算应支付的借款利息.2、银行借款不论期限长短都必须按期偿还,并按规定支付利息.3、企业计提固定资产折旧时,应借记“累计折旧”账户,贷方“固定资产 1.若二次函数y=f(x)的图像过原点,且1小于等于f(-2)小于等于2,3小于等于f(1)小于等于4求f(2)得取值范围2.设a>0,a不等于0,t>0比较1/2loga^t与loga^(t+1)/2的大小,并加以证明3.若0 地球的同步卫星绕地球公转的周期为?是一恒星日?还是一太阳日? 求这些会计的判断题答案,最好能说明错在哪里 1.用银行存款去归还银行贷款,属于“一种形式的资产减少,引起另一种形式的负债减少”.2.按会计核算原则,凡是支出的效益仅与本会计年度 米分米厘米毫米国际上采用什么样的符号表示 在2004版中 已知圆弧的长度,起点何半径;如何用CAD划圆弧,怎么样标注圆弧?需要直接标注圆弧;可以吗! 点A在半径为1且圆心在原点的圆上,且角AOx=45度,点P从A点出发,逆时针等速沿着单位圆旋转已知P在1秒内转过的角度为M(0度 在同一圆里,直径的长度都( ),半径的长度都( ),直径的长度是半径的( ) 写一篇《刺猬汉斯》读后感,400字作文 如图,在平面直角坐标系xoy中,直线AB过点A(-4,0),B(0,4),圆的半径为1原点为圆心,点P在直线AB上,过点P作圆的一条切线PQ,Q为切点,则切线长PQ的最小值为? 1.在同一个圆里,直径的长度是半径的( ) 2.在同一个圆里,有( )条半径,所以的半径长度都( ).1.在同一个圆里,直径的长度是半径的( )2.在同一个圆里,有( )条半径,所以的半径长度都 机械制图多个相同直径的圆怎么标注,多个相同半径是不是标注一个就可以了? 如图,以原点为圆心的圆的直径AB= 在同一个圆里,直径的长度是半径的2倍,可以表示为( )或( ) 机械制图中,连续的几个相同的尺寸如何标注好... 如图,在平面直角坐标系中,半径为1的圆的圆心O在坐标原点,且与两座标轴分别交于A/B如图,在平面直角坐标系中,半径为1的圆的圆心O在坐标原点,且与两座标轴分别交于A、B、C、D四点,抛物线y=ax 几个政治判断题请给出正确答案!(错误的给予说明)1、禁止使用童工是法律保护未成年人生命健康的具体体现.( )2、人是自己性格的设计和创造师,因此塑造性格完全是个人修养的事()3 1、2、3、4题怎么写 童话故事,200字左右的 (文化) 要注明错在哪里,判断1.不同的民族文化,不同文化环境下的人们的交往行为和交往方式一定不同( )2.文化决定了人们的思维方式,认识活动,实践活动( )3.处在一定的文化环境中就 请问第3题和第4题怎么填 跨度9米,用那种规格H型钢能承受10吨的重量柱子与柱子距离是9米,上面铺导轨,10T双梁起重机在上面跑.H型钢用多大16T天车 ,柱子与柱子距离是9米,9米的跨度轨道梁应该是多大的,上面是16T天车 这道政治判断题哪里错了?2008年8月,十届人大常委会第四次会议通过 循环经济促进法,他的立法依据是可持续发展战略 西方童话中,猫头鹰常以最聪明的角色出现,是因为猫头鹰:A:头脑聪明B:活的长久C:与人长得相似D:经常保持思考的表情 如图在以O为原点的直角坐标系中,点A,C分别在X轴,Y轴的正半轴上,点B(a,b)在第一象限一四边形OABC,反比例函数y=分之k(k>0,x>0)的图像与AB相交于点D,与BC相交于点E,且BE=CE(1)试说明:BD=AD(2) 政治的判断题,我做得对不对? 用青草.桃子.老鼠编童话故事 以平面直角坐标系的原点O为圆心以1为半径作圆若点P是是该圆上第一象限内的一点且OP与X轴正方向组成角R则点则点P的坐标为 男女交配要注意什么 该题目的解法是如下 我的问题是这个式子是怎么来的? 解决几道判断题,顺便讲解一下对或错的理由1、将一个半径为rcm的圆形纸片切割成若干等份后拼成长方形,长方形的长是π rcm ( )2、r的平方=r×r=2r ( ) 如图,在以O为原点的直角坐标系中,点A、C分别在x轴、y轴的正半轴上,点B(a,b)在第一象限,四边形OABC是矩形,若反比例函数y=k/x的图像经过ab边的中点f,交bc边与点e (1)求证be=ce(2)若四边形oe 判断题 算法只能解决一个问题(说明理由) 1、准确数18精确到个位,2、四舍五入奖3.995精确的百分卫是4.00 市场营销判断题~无差异性市场营销战略完全不符合现代市场营销理论.市场定位、产品定位和竞争性定位分别有不同的含义.企业在市场营销方面的核心能力与优势,会自动地在市场得到表现. proe中怎样在尺寸标注前加半径、直径符号在对圆进行尺寸标注时怎样才能在尺寸前加r ψ 谢谢您了
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘