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

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

2012末日APP推荐 求生自救必备! Windows8上网利器 不卡死的IE10浏览器 为何Java程序员学习Clojure有优势? 我们是如何阅读代码的? “热水冷却”技术将主导美国国防部数据中心改造 程序员想玩转大数据:需要知晓的12种工具 2012年谷歌应用商店增长迅速 但苹果最赚钱 Apple微软Google都在竞购一家创业公司 违反新条款?苹果强行下架AppShopper 2012移动开发教程盘点:最棒的国外游戏开发站 重思JavaScript的好与坏 细数那些 NeXT 留给 OS X 的遗产 一张图让你知道大数据的生态系统 Camera360开放SDK:拍照和滤镜一行代码搞定 一周消息树:计算机将拥有五感 人类面临威胁? 通晓数学的人就可以当程序员吗? 360发布企业版4.0 可自定义软件白名单 不要总是依赖机器 MongoDB扩展彰显分片功夫 Dell与HP的OpenStack的战略:渠道对抗SLA 路况电台王雷:未来车载系统会是Android的天下 移动周报:2012移动开发工具系列盘点 谷歌不愿错失机会 Android或不再成它人独享 黑客文化:Facebook公布2012年Hackathon大赛顶级“黑客作品” 中国移动音乐开放平台正式对外开放 GitLab 4.0发布 更好地支持PostgreSQL 傻瓜式移动应用开发平台:专访摩讯创始人赵健 日本DeNA进军中国智能电视,与海信战略合作 扎克伯格不仅为Poke编码,而且还“献声” Wordament:首款支持Xbox Live成就的iPhone游戏 使用Storm实现实时大数据分析! 孙博凯:微软日益开放,Windows Azure更加拥抱开源 一道汇编题 到了他家,他老婆开的门,他一把抱住他老婆还笑嘻嘻的对我们说:“这小姐挺漂亮的,有点像我老婆!嘿嘿 立法会第一立法案:水源小斑竹选举法 关于TProgressBar控件的几个问题 有个问题请教,是关于“名字空间”的!~~ 点击了一个Button(删除)安钮就可删除选中了的复选框的相关记录?看看代码是什么原因?? 谁能提供《The C++ Programming Language》书后的练习题的答案? 多外部IP的情况下,如何让Socket以其中一个指定的IP地址去连接外部的机器? PowerPoint XP设置模板的问题 linux 下有那些开发工具? 打开InputPanel出错 下载 oci不能正常显示汉字 帮我看个jsp程序,这是我的处子show,很多错误,希望大家来找碴。 请问如何实现在两个Form内各自的textbox之间进行数据流通?(50分) 急急急!在SQLserver中怎样调用索引? TreeView控件的字体如何改变? 关于字符串的处理问题 關于用存儲過程實現表關鍵字段自增的問題 <<雍亲王发迹史>>(有正文) 请问XML问题,很急,再线等!!谢谢!! 有人用msn messager 吗? 有关PXE技术,大虾请进 为什么我创建dialog时总是失败?? 数据窗口求和问题 三个小问题 【求助】【ZJU1504】那位能花点时间看看我的代码 如何实现类似vc的可视化拖拉形成界面功能? repeater控件的ItemTemplate模板问题!不容忽视!!! 怎样在自己的程序中备份数据库!!!??? 谁知道哪里有《杀手的童话》电影下载? 有谁知道用VC6在没有服务器端程序的情况下,如何通过账号操作远程SQL数据库. 散分!! 回复被删除,信誉分被扣! 请VFP高手帮我! mysql如何连接java,菜鸟求救!!! 有关win32 api 的问题 使用字典或者数组的问题(急) 电脑装不上xp了,急急急!那位大侠救救我! 如何使用WebLogic的LDAP服务,最好有相关文档和教材,拜谢 再问安装程序制作:我实在一点都不知道! 从哪开始啊,装了install 。。。。 想作一个阻止IE弹出窗口的程序,谁有例子? 3d游戏引擎中的关键的图形图象技术(特别是新的)有哪些? pb高手请进(送分题) 我不懂汇编 SendMessage(ClientPanel->Handle, WM_KEYUP, VK_CONTROL, 0);第三个参数是什么意思? 哪位大哥用过PXE? 上传到服务器的站点出错啊??Global.asax vb+asp.net????????? 怎样让我自己生成的菜单响应消息,并且知道所选的是哪一个菜单? 如何实现“有条件”数据绑定? WriteFile函数写大于4G的文件不成功,请教高手!急 请教高手,关于鼠标响应! 如果直线得倾斜角a=arc tan{4/3}.且经过点{-3,7},那么直线得斜截式方程是? 呐喊自序教案 请问鲁迅呐喊自序的意义中自弦灵魂是什么意思? 假如买火柴的小女孩来到中国作文450字 买火柴的小女孩好词好句 给买火柴的小女孩的一封信给一篇范文要550字以上没别的急 含有r和y的单词,最好是ry连在一起的,没有也没关系. 哪个单词里同时含有s和r先悬赏20,好的再加还有单词的意思,我是英语盲 关于《呐喊》中自序的理解:“在我自己,本以为现在是已经并非一个切迫而不能已于言的人了,但或者也还未能忘怀于当日自己的寂寞的悲哀罢,所以有时候仍不免呐喊几声,聊以慰藉那在寂寞 鲁迅《呐喊》自序的问题鲁迅在《自序》中说道“既然是呐喊,则当然须听将令的了,所以我往往不恤用曲笔,在《药》的瑜儿的坟上平空添上一个花圈,在《明天》里也不叙单四嫂子竟没有做到 含硫的物质一定不是生物大分子? 纤维素是以果糖为基本单位构成的生物大分子? 金正恩观看火力打击训练 欲打造精锐强北京积分落户分数好算门槛高 评分标准偷啥不好偷猪肉 藏哪儿不好藏裤裆财经观察:欧盟坎坷前行20年法国总统奥朗德会见王毅西班牙警察强奸妓女遭开除 被判监禁1中国海关知识产权保护展示厅正式开放杭州一天发生三起酒后落水事件 23岁杭州发布高层次人才“需求榜” 技术研湖北荆门煤矿透水事故续:第一名被困矿南昌市一人大代表涉嫌工程行贿被采取强养生 | 一招辨别肾阳虚和肾阴虚吃碗台湾鲁肉饭‍‍‍‍‍|雪知味陆金所获权威机构P2P平台风控评级第以色列如此“凶猛”的女兵,太逆天了!电商大数据:挖掘股市新密码拓荒者杨伟光换 位(写的真好!)创业板:让坚守者兴奋,让观望者懊恼周末汇 |“娜时代”结束:“娜”些年发布“银川宣言”:中国品牌汽车“出海新股汉邦高科(300449.SZ):
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘