阅读更多

0顶
0踩

移动开发

转载新闻 Swift开发必备技巧:static和class的使用

2015-01-28 15:06 by 副主编 mengyidan1988 评论(0) 有4027人浏览
Swift中表示 “类型范围作用域” 这一概念有两个不同的关键字,它们分别是static和class。这两个关键字确实都表达了这个意思,但是在其他一些语言,包括Objective-C中,我们并不会特别地区分类变量/类方法和静态变量/静态函数。但是在Swift中,这两个关键字却是不能用混的。

在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括在enum和struct中表述类型方法和类型属性时。在这两个值类型中,我们可以在类型范围内声明并使用存储属性,计算属性和方法。static适用的场景有这些:
struct Point {
    let x: Double
    let y: Double
    // 存储属性
    static let zero = Point(x: 0, y: 0)
    // 计算属性
    static var ones: [Point] {
        return [Point(x: 1, y: 1),
                Point(x: -1, y: 1),
                Point(x: 1, y: -1),
                Point(x: -1, y: -1)]
    }
    // 类型方法
    static func add(p1: Point, p2: Point) -> Point {
        return Point(x: p1.x + p2.x, y: p1.y + p2.y)
    }
}

enum的情况与这个十分类似,就不再列举了。

class关键字相比起来就明白许多,是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。要特别注意class中现在是不能出现存储属性的,我们如果写类似这样的代码的话:
class MyClass {
    class var bar: Bar?
}

编译时会得到一个错误:
引用
class variables not yet supported

这主要是因为在Objective-C中就没有类变量这个概念,为了运行时的统一和兼容,暂时不太方便添加这个特性。Apple表示今后将会考虑在某个升级版本中实装class类型的类存储变量,现在的话,我们只能在class中用class关键字声明方法和计算属性。

有一个比较特殊的是protocol。在Swift中class、struct和enum都是可以实现protocol的。那么如果我们想在protocol里定义一个类型域上的方法或者计算属性的话,应该用哪个关键字呢?答案是使用class进行定义,但是在实现时还是按照上面的规则:在class里使用class关键字,而在struct或enum中仍然使用static——虽然在protocol中定义时使用的是class:
protocol MyProtocol {
    class func foo() -> String
}
struct MyStruct: MyProtocol {
    static func foo() -> String {
        return "MyStruct"
    }
}
enum MyEnum: MyProtocol {
    static func foo() -> String {
        return "MyEnum"
    }
}
class MyClass: MyProtocol {
    class func foo() -> String {
        return "MyClass"
    }
}

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

本文转载自:Swifter
来自: Swifter
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 感觉自己不会的东西太多了,不知道如何下手?

    GitHub 8.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 如果让我统计下,粉丝...

  • 不能见面的爱情——用视频聊天维持的亲密关系是怎样的

    关注“心仪脑”查看更多脑科学知识 关键词:文献综述、亲密关系 许多伴侣一生中大部分时间是处于异地恋(LDR)状态,他们因学业、工作等环境需求而被迫在地理位置上分离,尤其现在新冠疫情肆虐,想见一面就更加...

  • 在外包干了三年,我废了……不吹不黑!

    去年国庆,栈长分享了一次我的真实相亲经历:《一个程序员的国庆血泪相亲史,惨败而归…》,大家反响爆蓬,感觉十分有意思,今年国庆我再来分享一下我在外包的真实经历,是不是很想听? 没错,栈长也干过外包,一干...

  • 毕业5年,我把前后端好的书籍整理了一下,希望能帮到你(建议收藏)

    一些基础还是适用,网上也没有太多讲rab的书籍,将就看下也行,我没用过所以…. Apache Kafka源码剖析|徐郡明 虽然还没看,但知道应该不差。我是看了作者的mybatis源码分析,再来看这本的,相信作者。 ...

  • 学习学习再学习(十三)多买几本同类教程

    如果一个技能足够复杂(比如从零学编程),那就不要指望读完一本书就可以打天下。多买几本书同类的书——因为每个作者的出发点是...说实话我不太理解那些觉得『书太贵』了的人……从小就不太理解(我小时候家里并不...

  • 605元买了Java教程自学半年后…… How2J怎么样?我的Java自学心得

    前言:看现在好多人都在替How2J这个网站做宣传,宣传了那么多,都没几个人真正说这个网站的教程质量到底怎么样,严重怀疑这帮人到底跟着网站教程学了多少东西就出来乱回答……我不反对一些人赚佣金,你能赚到是你的...

  • 省钱又省时间的买书方法

    我经常买书,有几个问题曾经困扰过我:买什么,怎样更省时间,怎样更省钱?现在,我找到了好办法,它们都不是问题了。

  • 好久不来……

    好久不来…… 到了2012年4月,哥这二年来完了人生大部分事情,泡妞,谈恋爱,订婚,买房,装修,结婚,买车……人生的许多事情在这二年集中完成了,有得必有失,工作方面毫无长进。 老婆在旁边看快乐大本营,声音...

  • 江西科技师范大学泰豪校区计算机专业,扎心了!比取经还艰难的大学路,南昌居然占了这么多……...

    比取经还艰难的大学路,南昌居然占了这么多……相信每个人都有过这样的经历:读书的时候,学校一大不是在上课的路上,就是在下课的路上,最关键的是,真的很不方便! 出去买生活用品,七转八转;去校门口见老同学,...

  • 微星主板黑苹果_安装黑苹果,选对硬件能少熬几天夜……

    去年写了一篇关于黑苹果的文章,居然到现在都还有朋友在咨询我……不坑老师:用纯新手的视角,完美安装了黑苹果mojave!​zhuanlan.zhihu.com当初写这篇文章的时候,我对黑苹果的认识和要求还仅仅在“能正常使用”这...

  • 08. 今天, 小姐姐突然问了我一个问题……

    她要买笔记本电脑 (突然的失望……) 她不是小白, 知道电脑要看内存, CPU,显卡以及固态硬盘等等 甚至知道 N卡 和 A卡的区别 但是依旧被CPU的 “i5处理器 双核四线程” “i5处理器 双核双线程” …… 这些描述给整懵...

  • 『图解Java并发编程系列』10张图告诉你Java并发多线程那些破事

    在实际工作中,错误使用多线程非但不能提高效率还可能使程序崩溃。以在路上开车为例: 在一个单向行驶的道路上,每辆汽车都遵守交通规则,这时候整体通行是正常的。『单向车道』意味着『一个线程』,『多辆车』意味...

  • 我太机智了……30条关于数据行业内涵笑话&漫画

    记者:你不在身边不怕他空虚寂寞么》媳妇:他要整数据。记者:那他会不会花心变坏?媳妇:不会,他很忙,要每天要改分析报告。记者:你觉得这样好吗?媳妇:很好!玩数据就没钱玩女人!有点逼钱都换电脑去了 ...

  • 玩转服务器(华为云)—购买配置登录篇

    目录前言购买配置篇 导读: 对于程序员来说,每个人拥有一两个服务器进行学习是很有必要的,弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,可帮助您打造可靠、安全、灵活、高效...

  • A650 IS停产很久了……就算运气好,也不能得寸进尺

    今天上午依然是整理自己衣物的时间而下午,和老妈去附近的大中看了看DC品牌倒是比较多,就是能索取的资料太少了昨天去中关村的时候也是这样经济危机闹腾的也太厉害了吧?各个公司连彩页资料都要减少印刷量?在...

  • 用豆瓣读书Chrome插件,简单购买电子书

    为什么要做这款插件? ...在豆瓣上查看一本书的时候,页面的右侧会显示哪些网站可以购买该书以及各自的价格。 比如这本《乡关何处》...但是豆瓣只会提供纸质书的购买链接,不提供电子书的。除非该书豆瓣自己有售。

  • 的真实经历——写给如lgp7226一样为读不读书而迷惘的落伍兄弟……

    看来你来不及等我整理思绪写完我曲折的...玩的时间越来越比用来读书的时间多,逃课、偷窃、打架斗殴什么事情不好就挑什么事儿干。然而,命运是公平的,有多少付出就有多少收获。初一到初三,我的成绩每况愈下,初二升初

  • 刚刚Teradata的高管们说,“TA是唯一”……

    伴随技术“咻”一般的更新迭代,大家不禁感叹“现在用于分析的技术手段实在太多”! 要说架构方面,过去就是SQL,后来又出现了Hadoop,上面还有MapReduce……简直傻傻用不明白;如果提及分析语言,从JAVA到红极一...

  • 现在做啥都很卷……

    另一方面是因为自己步入职场已经一年多,虽然工作上进展顺利,技术也在不断提高,但随着年龄的增长,自己变得越发焦虑,北京的房子何时买得起,工资何时才能像股票一样大涨,导致每天晚上直到凌晨两三点才能入睡。...

Global site tag (gtag.js) - Google Analytics