阅读更多
在Xcode 6.3中,我们为Objective-C添加了新语言特性nullability注解。这个特性给Objective-C提供了表达API使用null和non-null统一的方式,相当于Swift语言中的Optional类型。Xcode 7继续为Objective-C与Swift之间更加自然的通信引入轻量级的泛型模型。泛型使得这两种语言能够可靠地融合并分享带有特定类型元素的集合。

这些特性对任何使用Swift和Objective-C这两种语言编程的人来说都比较有用。但应用程序开发人员每天使用的Objective-C代码占更大部分:这就是组成Apple SDK的那些框架。为了提升Swift和Objective-C的使用体验,全公司的范围内,我们在SDK的头文件中都提供了这样的信息。Xcode 7中,你会发现几乎所有常见框架都指定了其API的nullability注解,包括其集合类型的元素。这使得Swift代码的样子发生了变化。
变化前:
class UIView : UIResponder {  
	init!(frame: CGRect)
	var superview: UIView! { get }  
	var subviews: [AnyObject]! { get }  
	var window: UIWindow! { get }
	// ...
	func isDescendantOfView(view: UIView!) -> Bool
	func viewWithTag(tag: Int) -> UIView!
	// ...
	var constraints: [AnyObject]! { get }
	// ...
}

变化后:
class UIView : UIResponder {  
	init(frame: CGRect)
	var superview: UIView? { get }  
	var subviews: [UIView] { get }  
	var window: UIWindow? { get }
	// ...
	func isDescendantOfView(view: UIView) -> Bool  
	func viewWithTag(tag: Int) -> UIView?
	// ...
	var constraints: [NSLayoutConstraint] { get }
	// ...
}

最后一个疑问是Xcode 7中将代码转换成Swift 2的工具,在Xcode的Edit菜单下,Convert > To Latest Swift Syntax。通过必要的编辑,该工具会将一个使用Swift 1.2编写的项目转换成合法的Swift 2.0代码。这些改变源于改进后的头文件信息。例如,正在重写的一个方法,其参数和结果类型更加精确,方法转换的过程中将会被更新与之匹配。

在今年的WWDC的Swift and Objective-C Interoperability视频14:30处,对Objective-C所作的改进做了详尽的描述。注意,该视频使用的是Xcode 6.3中的__nullable语法,并非更新的Xcode 7中用的_Nullable。了解更多nullability注解的信息,可以看看Nullability and Objective-C。了解Swift 2.0和Objective-C中轻量级泛型更多信息,可以看看Xcode 7 Release Notes

(翻译/白云鹏 友情审校/汪洋)


原文链接:Apple Developer's Blog
1
0
评论 共 1 条 请登录后发表评论
1 楼 xieen 2015-08-21 12:24
 

发表评论

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

相关推荐

  • 详说单片机解密技术

    导语:目前,芯片解密主要应用在PCB抄板方面,PCB抄板除了对电路板复制的简单概念,还包括了板上一些加密芯片的解密。随着概念和知识保护的加强,芯片解密会慢慢向为程序研究服务方向发展,而不是现在的产品复制方向...

  • 详说Swift 2.0中的错误处理

    Swift 2.0主要在语言基本语法、安全性和格式美观度这三方面进行了改进。除了这些新的功能特性,还有对语法的优化、修饰及美化,最后是Swift 1.x中最具影响力的错误处理机制。

  • 单片机与DSP中的详说单片机解密技术

    导语:目前,芯片解密主要应用在PCB抄板方面,PCB抄板除了对电路板复制的简单概念,还包括了板上一些加密芯片的解密。随着专利概念和知识保护的加强,芯片解密会慢慢向为程序研究服务方向发展,而不是现在的产品复制...

  • 不算“真正的语言”?详说Swift 2.0中的错误处理

    苹果公司在今年的全球开发者大会(Worldwide Developers Conference, WWDC)上宣布推出Swift2.0,该语言的首席架构师Chris Lattner表示,Swift 2.0主要在语言基本语法、安全性和格式美观度这三方面进行了改进。...

  • zabbix4.0学习八:JMX有能监控哪些监控项详说

    在使用jmx监控tomcat时一直好奇MBean是从哪里得到的,原来使用java的 监视和管理控制台可以查看。 Jconsole: JAVA 监视和管理控制台简介 远程连接tomcat 打开tomcat/bin/catalina.sh文件,在#!/bin/sh下面添加如...

  • dede3.1分页文字采集过滤规则详说(图文教程)

    dede3.1分页文字采集过滤规则详说(图文教程)

  • dede3.1分页文字采集过滤规则详说(图文教程)续四

    dede3.1分页文字采集过滤规则详说(图文教程)续四

  • dede3.1分页文字采集过滤规则详说(图文教程)续二

    dede3.1分页文字采集过滤规则详说(图文教程)续二

  • web性能优化:详说浏览器缓存

    如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形 Etag 的实现 在node 的...

  • LearnOpenGL从入门到入魔(3):绘制纹理

    LearnOpenGL从入门到入魔(1):OpenGL简介 LearnOpenGL从入门到入魔(2):绘制2D图形 LearnOpenGL从入门到入魔(3):绘制纹理 LearnOpenGL从入门到入魔(4):绘制3D图形 LearnOpenGL从入门到入魔(5):简单滤镜效果 ...

  • 《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群

    《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群

  • 硬盘详说.pdf

    硬盘详说.pdf

  • Android Studio 使用xmlns:app 但 代码不提示问题的解决

    我们在编写我们的xml布局文件的时候我们可能会...我们一般来说在写代码的时候都会有代码提示,比如说 但是我们在用这里的app的时候却遇到了这样一个尴尬的境地,就是说我们输入app之后只出现下面的界面

  • 使用 vue-cli 3.0 快速创建项目 (两种方法:代码方式和图形化创建项目)

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目。这篇文章将会从实操的角度,介绍整个搭建的过程。 本快速创建项目方法都是基于 node.js 和 cnpm 的基础上进行的。 安装准备 node...

  • 走近移动设计:应用场景篇

    本篇章主要详说其应用场景的不同,通过与web产品的对比,发现在设计上的启示点。从下方两张图表的走势对比,开始我们走近移动设计之旅的应用场景篇。一个好的Web产品,他的点击数和点击UV是随着时间的发展,走势是...

  • CSS专题(五):详说链接的伪类A hover等

    一 背景  关于伪类,或链接伪类,可能我们都知道a标签的一些写法,a:hover,a:focus,a:visited,然后写下不同的样式,表示链接在各种状态下的表现。我们可能也遇到过input:focus的写法,表示输入框遇到了焦点的样式...

  • Gromacs中文手册5.0.2.pdf

    Gromacs中文手册5.0.2

  • tensorflow_transform-0.1.0-py2-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • tensorflow_recommenders-0.3.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

  • python冒泡排序(Bubble Sort).docx

    python冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是一个用Python实现的冒泡排序的例子: ```python def bubble_sort(lst): n = len(lst) for i in range(n): # 创建一个标记,用于优化 swapped = False # 遍历所有未排序的元素 for j in range(0, n-i-1): # 交换相邻元素,如果它们的顺序错误 if lst[j] > lst[j+1] : lst[j], lst[j+1] = lst[j+1], lst[j] swapped = True # 如果在内循环中没有交换

Global site tag (gtag.js) - Google Analytics