xcode 7.3 swift beta发布,Swift 2.0带来哪些新变化

Swift 2.1的新变化
每天15篇文章
不仅获得谋生技能
更可以追随信仰
Swift 2.1的新变化
作者:Russ Bishop&来源:Russ Bishop&火龙果软件& 发布于&
1009 次浏览
&&&&评价:
摘要:在假期都想度假放松时,Xcode 7.1 Beta 2版本支持Swift 2.1悄然而至,本文作者全能型程序员Russ Bishop详细介绍了Swift 2.1中的新变化。
如果你觉得苹果的Swift语言没有赶上趟,那就要重新审视这一观点了!Xcode 7.1 Beta 2版本已经支持Swift 2.1了。我没有必要在此事无巨细一一列举,你随时可以自行查看其发布说明的。
互操作性和数据类型
从C语言中引入的枚举类型自动遵循Equatable协议。所以用于样式匹配的开关语句(switch)目前不再强制去写扩展(extension)声明和操作符(operator)。
C语言中的非匿名联合体(union)被作为结构体(struct)引入。结构体中的每一个字段与联合体中的字段相对应。Swift中的结构体大概是用来维持一种能力的,即使用联合体给底层同一数据位(bit)投影不同的字节或字。但我还没验证过Swift结构体的域(field)是否会用同一个位进行存储。
C语言结构体中,相对鲜为人知的位域(bitfield)也被引入了Swift,能够使用了。
dispatch_block_t变回了@convention(block) () -& Void的样子,因此 dispatch_block_create又能正常工作了。
令人欣喜的特性
字符串可以按照字符串为单位进行插入操作。这是一直困扰我的地方。如今可以这样做了:&fancy \(thing ?? “”)&。
如果只是文件中的私有内容被修改,则不会诱发与之依赖的其他文件重新编译。有些时候,这样做性能会得到大幅地提升。
类型检查产生了“继续改进”模样的错误消息。我不会太多关注这一点,除非明显遇到了很常见的场景,那就是一个普通的闭包本身带有错误。这基本上是说你出错了,要么是超出了范围,要么是声明了没有用的内容;我已经习惯了剪切和粘贴,从而避免了这样的问题。我也会手动给闭包传递参数和返回类型。这部分是不错的!
协变性和逆变性
函数和闭包目前都具有 协变性(covariance)和逆变性(contravariance)。
这一奇特的性质表示可以通过Any -& Int这样的转换,得到String -& Any这样的结果。
换句话说,当返回类型的派生程度较目标类型大时,闭包的参数派生程度就较目标类型的小。想一想这是合理的……如果函数可以接受(Any, Any)类型的参数,那么它一定能够接受(String, Int)和(AnyObject, NSURLRe-quest)类型的参数。如果目标类型是AnyObject,那么UIButton肯定也没问题。
修复的问题
当Objective-C中的块(block)传递给Swift中的方法时,会引起内存泄漏或崩溃,这个问题被修复了。
在switch语句中使用as Type处理多种类型的转换不再引起内存泄漏。
使用var或let一次声明多个全局变量不会再引起内存出错。
while let和while case语句不再使变量作用于其下的语句块。这样一来,可能会导致编译器崩溃,因此我担心对每个人来说这都是一种破坏。
已知的问题
不带优化设置编译的情况下同时开启调试信息,这样做会导致编译器崩溃。解决方法是在非调试模式构建过程中,使用-gnone禁掉调试信息。
紧张的日程外加生病,处理事情忙得不可开交。但我期待着恢复定期写博客的状态。熬了一段时间后,有几篇文章马上要完成了。一些是关于Swift的文章,另外一些是更泛泛的内容。
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
希望我们的资料可以帮助你学习,也欢迎投稿&提建议给我
频道编辑:winner
邮&&&&&&&件:winner@
|&京ICP备号&京公海网安备号Xcode 6.3 Beta发布,Swift 1.2带来哪些新变化?
发表于 16:42|
来源未来眼之老码团队|
作者王芳杰
摘要:苹果发布Xcode 6.3 Beta,更新Swift语言至1.2版本,修改OC语法,进一步提升Swift与OC代码交互性,其代码迁移工具可以帮助开发者实现代码升级。本文作者王芳杰在第一时间对Release Notes进行了完整翻译。
北京时间2月10日,苹果在面向开发者推送iOS 8.3 Beta的同时,还发布了版本号为6D520o的Xcode 6.3 Beta,其中便包含了iOS
8.3 Beta和OS X v10.10 SDK,并进一步提升了Swift与Objective-C代码的交互性,而Swift业已更新至1.2版本。
从看出,Xcode 6.3 Beta包含了很多颇为值得开发者期待的改变,共计50多处改动,同时修改了Objective-C的语法,足见苹果对Swift语言的重视。而其代码迁移工具可以帮助开发者将其代码从Swift 1.1(Xcode 6.1)升级至Swift 1.2(Xcode 6.3),具体执行编辑菜单(Edit)-&转换(Convert)-至(To)Swift1.2即可。
具体更新如下:
Swift语言的增强
Swift现在支持目标增量编译,例如当一个文件改变时不会重新编译Target中的每一个文件。这个基于固有依赖分析。所以你依然会看到有很多文件在必要情况下被重编。如果你发现需要重编但没有重编的情况,请报一个Bug出来。清理Target后再编,会按照往常的流程进行。
增加了一个新的Set数据类型,它提供了元素唯一化,且有完整语义的通用数据类型集合。它和NSSet类型桥接,提供和Array和Dictionary相类似的功能。
if let语句现在被扩展为可以支持多条条件判断:
if let a = foo(), b = bar() where a & b,
let c = baz() {
它允许你测试多种选择,并且包含一个bool判断。当然这种情况不包含嵌套判断。
let常量现在生成时不需要立即初始化,新的规则是let常量必须在被首次使用前初始化即可(和var一样)。或者说它只能被初始化,也就是说在初始化后它不能再被改变或者重新赋值,可用的模式如下:
let x: SomeThing
if condition {
这个正常的来说需要var变量用法,尽管这里没有任何修改的操作。
"Static"静态方法和属性现在允许在class中使用(作为“class final”的别名)。你现在可以在类中声明一个静态存储属性,它享有全局存储空间和首次使用再初始化的惰性构造功能。协议Protocal现在会声明一个static的类型要求而不是声明一个class的要求。
对于表达式闭包的类型引用有了几点改进:
含有单返回语句的闭包现在类型检查时以单表达式闭包处理。
匿名的且含有非空返回类型的单表达式现在可以用在Void上下文中。
多表达式的闭包类型的情况可能无法被类型推断出来,这归功于缺乏返回类型的情况能被正确的推断出来。
Swift中的枚举类型现在可以通过@objc关键字导出到Objective-C中。@objc的枚举类型必须定义一个整型的原始类型,并且该枚举不能泛型化或者不能使用关联值。由于Objective-C中的枚举类型没有命名空间,所以导出到Objective-C中的枚举类型以枚举名字和case项目名字的组合的方式使用。
比如在Swift中的声明:
enum Bear: Int {
case Black, Grizzly, Polar
导出到Objective-C:
typedef NS_ENUM(NSInteger, Bear) {
BearBlack, BearGrizzly, BearPolar
Objective-C语言的扩展语法现在可以判断出Objective-C API中指针或者block的是否为空,同时允许不带ImplicitlyUnwrappedOptional协议地导出Objective-C
Swift现在可以部分支持导入C的联合类型,包括unions、bitfileds、SIMD vector类型以及其他Swift的不支持的C特性。这些不被支持的元素不能在Swift中的直接访问,但是在Swift中,Objective-C或者C可以以参数或者返回类型的方式使用。这包括Foundation
NSDecimal类型、GLKit GLKVector和GLKMatrix类型,以及其他一些类型。
被导入的C结构体现在在Swift中有一个默认的构造器,它会将结构体中的所有的元素初始化为0,例如:
import Darwin
var devNullStat = stat()
stat("/dev/null", &devNullStat)
如果一个结构体的元素不能被正确的初始化为0(比如被标记为新的_nonnull标示符时),这个默认的构造器将会终止。
String的索引类型间新的转换API现在可以用了,如String、String.UnicodeScalarView、String.UTF16View以及String.UTF8View,
同时每个String View转换为String的函数也可使用。
类型值在println函数或者字符串内插算法中现在可以打印完整的类型名称了:
toString(Int.self) // 打印 “Swift.Int"
println([Float].self) // 打印 "Swift.Array&Swift.Float&”
println((Int, String).self) // 打印 "(Swift.Int, Swift.String)"
一个新的“@noescape”属性可以用在函数的闭包参数上,这意味着这个参数是唯一可被调用的(或者用在函数调用时以参数的方式出现),其意思是它的生命周期比函数调用的周期短,这有助于一些小小的性能优化,但最重要的是它屏蔽了闭包中对self.的需求。这使得函数的控制流比其他更加透明。在未来的beta版本中,标准库函数将普遍采用这种特性,比如autoreleasepool():
func autoreleasepool(@noescape code: () -& ()) {
pushAutoreleasePool()
popAutoreleasePool()
相比Swift 1.1,Swift 1.2在很多方面的性能上有本质的提高,比如多维数组算法更快,未优化的代码更加快速。
表达式类型的错误诊断有了很大的提高。
很多通用表达式的检查效率有很大提高,这个有助于降低编译时间和减少“expression too complex”的错误。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章Xcode 7 beta发布,Swift 2.0带来哪些新变化_百度知道
Xcode 7 beta发布,Swift 2.0带来哪些新变化
我有更好的答案
网上有,感兴趣的是加了异常机制
其他类似问题
为您推荐:
故宫的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁酷勤网 C 程序员的那点事!
当前位置: >
浏览次数:次
WWDC 2015首日,苹果发布了版本号为7A120f的Xcode 7 beta,包含了Xcode IDE、Swift 2编译器、Instruments、模拟器和最新的OS X、iOS、watchOS SDK。
从可以看出,Swift 2.0包含了许多非常niubility的特性,现在,在Swift中支持错误处理,如抛出(throw)、捕获(catch)、管理(manage)等,并且可以和NSError无缝交互。而当新的API需要向后兼容旧的系统版本时,如果当前API和将要部署的目标系统版本不一致,将会抛出一个编译时错误。而近来在呈现&自由落体&趋势的Objective-C也有着两处修改。具体更新如下:
Swift 2.0和Objective-C的更新
错误处理:我们可以在Swift中构建一个函数用来抛出,捕获和管理错误。我们可以接触和处理可恢复的错误,如&file-not-found&或者网络超时,Swift和错误处理可以和NSError无缝交互。
可用性检查:如果你在一个旧的部署平台上调用的一个新的系统版本引入的API时将触发一个编译时错误。我们可以在if或者guard条件语句中使用#available()函数来检查API函数的可用性:例如:
if#available(iOS8.0,OSX10.10,*){
//当版本匹配时使用HandoffAPIs.
letactivity=
NSUserActivity(activityType:&com.example.ShoppingList.view&)
activity.becomeCurrent()
//当版本不匹配时返回.
你可以在你的代码声明中使用@available()属性声明来指定可用性信息。例如:
@available(iOS8.0,OSX10.10,*)
funcstartUserActivity()-&NSUserActivity{
指示startUserActivity()方法只在iOS8.0+,OSX10.10+以及以其他平台的全版本可用。
协议的扩展性:现在可以为协议类型编写扩展,这样就可以为遵循该协议的任意类增加方法或者属性,极大重用我们的代码。
协议默认实现:现在可以为协议扩展中指定的需求提供一个默认实现,这样便可以使用诸如&mixin&和&trait&的模式。
新的defer语句:这个语句在代码生命周期结束时用来做清理的工作,该特性在并发开发时使用新的错误处理模型时非常有用。例如:
letf=fopen(&x.txt&,&r&)
defer{fclose(f)}
tryfoo(f)//f会关闭如果错误产生的话.
letf2=fopen(&y.txt&,&r&)
defer{fclose(f2)}
trybar(f,f2)//如果错误产生f2关闭,接着f关闭。
}//f2关闭,如果没有任何错误产生f关闭。
新的guard语法:这个新的语法允许你在一个代码周期中构建一个提前的退出点。例如:
guardletz=bar()else{return}
这里的else语句被用于退出代码块(和return、throw、break、continue等类似),或者终止调用一个@noreturn属性修饰的函数。
增强化的模式匹配:switch/case的模式匹配现在在很多新的条件流程控制语句中可用,这包括if/case,while/case,guard/case和for-in/case、for/in,同时也允许使用&where&判断。
新的do语句:在do语句中支持代码块嵌套,例如:
//newscope
//anotherscope
可测试性:关于Swift2.0框架和App的测试现在不需要将内部功能代码路由到public代码了。在待测试代码中使用@testable import {ModuleName}语法使所有的内部私有和public出来的代码可用。App或者framework的target在编译时需要启用&Enable Testability&编译设置。这个&Enable Testability&编译属性只能在Debug配置中可用,因为它需要导出内部符号信息从而妨碍代码优化。
对C函数指针的支持:以函数指针作为函数参数的C函数将会使用闭包或者全局的函数的方式调用,由于这个限制,所以闭包不能捕获其上下文环境。例如,标准C库函数qsort将会按照如下方式调用:
vararray=[3,14,15,9,2,6,5]
qsort(&array,array.count,sizeofValue(array[0])){a,bin
returnInt32(UnsafePointer&Int&(a).memory-UnsafePointer&Int&(b).memory)
print(array)
增强的诊断信息:增加了一个新的警告信息用来在尽可能的情况下鼓励使用let而不是var。同时也增加了新的警告信息来提示未使用的变量,无法触发的switch case分支判断等,同时对于switch语句耗尽的判断更加智能。
SIMD支持:Clang中扩展的矩阵算法在swift中可以导入并使用了,大数据量的图形算法或者其他系统级别的数据运算在Swift实现成为可能。
枚举中现在支持多泛型关联值,例如:
enumEither&T,U&{
caseLeft(T),Right(U)
打印特定枚举类型值时现在可以显示枚举值和附带的值了,但是这个对于@objc类型的枚举类型或者含有多附带值的枚举类型不支持。
现在允许对泛型类型编写公共扩展(Public)了。例如:
publicextensionArray{&}
非泛型的类可以继承自泛型的类了。
Swift字符串字面量的拼接,包括跨行文本,现在确保能够进行编译时优化。
可失败便捷构造器现在允许在调用self.init前调用return nil语句。指定构造器在返回nil之前必须初始化所有的存储属性,这是一个已知的限制。
内嵌函数现在可以递归引用函数本身或者其他的内嵌函数。
if条件语句现在支持标签化了,可以使用break去跳出一个标签化的if判断。注意不带标签的break语句只能使用在循环或者switch/case语句中而不能用在if中。
一个新的x?语句用来匹配可选类型。
一个新的@nonobjc属性用来选择性的禁止实例的导出,这个和@objc相对应。
在标准库中增加了一个新的函数:readLine()
Playground
富文本注释:采用Markdown样式的语法来解释代码的功能。
内联结果:在代码的下方直接显示代码的输出的结果。
资源:允许使用项目导航器面板向Playground中增加诸如图片一样的资源。
辅助代码:在Playground本身之外保留额外的代码用作辅助功能。
分页:采用Bundle类似的方式来组织Playground结构。
详解Swift语言的改变
OS X 10.11、iOS 9和watchOS 2 SDK采纳了一些Objective-C的特性用来提高Swift的体验,如可空性、类型化集合和一些别的特性。
标准库中重构了很多泛型的全局函数(如map、filter和sort),采用协议扩展方式增加这些方法。这个好处是对于其他的关联类型能很好的适配。
方法和函数现在使用同样的参数命名规则了,我们可以用&_&符号来省略一个外部的参数名,为了简化使用,用来指定参数名的简化符号&#&被移除,因为Swift为默认参数提供了特殊的规则:
funcprintFunction(str:String,newline:Bool)
funcprintMethod(str:String,newline:Bool)
funcprintFunctionOmitParameterName(str:String,_newline:Bool)
printFunction(&hello&,newline:true)
printMethod(&hello&,newline:true)
printFunctionOmitParameterName(&hello&,true)
NS_OPTIONS类型现在遵循OptionSetType协议,这样可以避免set样式的接口调用:
避免采用如下位运算的调用方式:
//Swift1.2:
object.invokeMethodWithOptions(.OptionA|.OptionB)
object.invokeMethodWithOptions(nil)
ifoptions&.OptionC==.OptionC{
//.OptionC被设置
选项设置支持字面量语法和set样式的调用,如contains:
object.invokeMethodWithOptions([.OptionA,.OptionB])
object.invokeMethodWithOptions([])
ifoptions.contains(.OptionC){
//.OptionCisset
在Swift中一个新的Option设置类型可以采用结构体遵循OptionSetType协议的方式编写。如果该类型中指定了一个rawValue属性和static let的常量定义,那么标准库将会为其他选项提供默认实现:
structMyOptions:OptionSetType{
letrawValue:Int
staticletTuringMachine=MyOptions(rawValue:1)
staticletLambdaCalculus=MyOptions(rawValue:2)
staticletVonNeumann=MyOptions(rawValue:4)
letchurchTuring:MyOptions=[.TuringMachine,.LambdaCalculus]
do/while循环被重名为repeat/while,这样更加显而易见:
Swift 1.2:
}while&condition&
Swift 2.0:
}while&condition&
println和print被合并成一个print函数,并带有一个默认的参数:
Swift 1.2:
funcprint(&stufftoprint&)
funcprintln(&stufftoprint&)
Swift 2.0:
funcprint(&stufftoprint&,appendNewline:Bool=true)
Swift的文档注释现在基于Markdown语法。
参数纵览语法:
-Parameters:
单独参数语法:
-parameterx:...
-parametery:..
-returns:...
其他需要在QuickHelp中高亮的语法字段,可以参考Markdown语法。
CFunctionPointer&T -& U& 类型被移除,C函数现在使用新的@convention(c)属性声明,和其他函数类型一样,@convention(c) T-&U是一个非空的除非是它是可选的。@objc_block属性由@convention(block)取代。
类型标注不能用于模式匹配,而需要作为标注声明的一部分:
这意味着,以前的这样的写法:
var(a:Int,b:Float)=foo()
需要被重构为:
var(a,b):(Int,Float)=foo()
其实这个改动原因是为了和元组用法相区分。
在Objective-C的枚举类型导入到Swift时,已经废弃的枚举元素将不会影响可用元素的使用,这个可能需要Swift中一些枚举名称的改变。
从C中导入的枚举类型都表示为RawRepresentable,这包括哪些没有被声明为NS_ENUM和NS_OPTIONS枚举值,作为这个变化的一部分,所有这些枚举类型中的value属性都需要重名为rawValue.
find被重名为indexOf(),sort被重名为sortInPlace()以及sorted()重名为sort().
String.toInt()重名为Int(String)的可失败构造器,因为构造器语法更适合类型转换。
String类型不再遵循SequenceType,可以使用.characters,.utf8和.utf16对应字符集的运算。
在泛型函数中声明了类型参数但是在函数中没有使用时将产生一个编译时错误,例如:
funcfoo&T&(){}//error:genericparameter&T&isnotusedinfunctionsignature
修复了Swift中泛型需求打印时&T==T&的错误。
修复了跨文件协议遵循时符号不可见或者重复的错误。
在Swift中增加了@objc(propertyName)属性,当该属性导入到Objective-C时可以采用这个propertyName作为getter/setter访问器的默认名,例如:
classMyClass:NSObject{
@objc(theProperty)property:String//Objective-C属性被命名为&theProperty&
//Objective-Cgetter访问器被命名为&theProperty&
//Objective-Csetter访问器被命名为&setTheProperty:&
作者简介:
王芳杰 老码团队()成员,目前就职于叠拓信息技术有限公司,担任叠拓NGN中国人力资源培养经理、叠拓NGN中国售前经理,《老码说编程之玩转Swift江湖》一书作者。
& 相关主题:Xcode 6.3 Beta发布,Swift 1.2带来哪些新变化?
发表于 16:42|
来源未来眼之老码团队|
作者王芳杰
摘要:苹果发布Xcode 6.3 Beta,更新Swift语言至1.2版本,修改OC语法,进一步提升Swift与OC代码交互性,其代码迁移工具可以帮助开发者实现代码升级。本文作者王芳杰在第一时间对Release Notes进行了完整翻译。
Swift语言的改变
“确保转换”和“可失败转换”的概念现在被分为两个操作符。可失败转换现在使用as!运算符,这个!感叹号可以让代码的读者更清晰的明白本次转换可能失败并触发一个运行时错误。“as”操作符会保持向上转换(比如“someDerivedValue转换为Base”)或者类型标注(“0
转换为Int8”),它保证了转换不会失败。
结构体和类构造器中的let不可变属性现在被规范为更加标准的通用模型:lets类型初始化后将永不会被改变或重新赋值。以前的实现是,可以在构造器中任意修改,而现在它们只允许被初始化和提供值操作。如果一个属性在声明时已经赋值,那么它会被所有的构造器认为已经含有初始值。
从桥接Objective-C类 (NSString/NSArray/NSDictionary)到它Swift中值类型的隐式转化被移除。这将是Swift的类型系统更加简单和可预测。这意味着:
import Foundation
func log(s: String) { println(x) }
let ns: NSString = "some NSString" // Okay
log(ns) // 错误
// "'NSString' 不能转换为 'String'"
为了完成桥接转换,需要用显式转化符标注:
log(ns as String) // succeeds
从Swift类型到Objective-C类型的桥接隐式转换依然被允许,比如:
func nsLog(ns: NSString) { println(ns) }
let s: String = “some String”
nsLog(s) // okay: implicit conversion from String to NSString is still permitted
@autoclosure现在标注在参数上,而不是标注在参数的类型上。比如:
//以前我们这样写:
func assert(predicate : @autoclosure () -& Bool) {… }
//现在需要这样写:
func assert(@autoclosure predicate : () -& Bool) {… }
使用在函数参数上的 @autoclosure属性现在含有@noescape新属性的功能,这个改进限制了@autoclosure作为控制流程以及惰性计算的能力。
柯里化函数现在可以指定参数标签了:
func curryUnnamed(a: Int)(_ b: Int) { return a + b }
curryUnnamed(1)(2)
func curryNamed(first a: Int)(second b: Int) -& Int { return a + b }
curryNamed(first: 1)(second: 2)
Swift现在可以检测在Swift类型系统中覆盖和重写的差异以及通过Objective-C运行时可见的影响。比如,下面Objective-C类中对属性的setter和类扩展中对方法的“setProperty”它们之间的冲突现在可以被诊断:
class A : NSObject {
var property: String = "Hello" // 注意: Objective-C 方法 'setProperty:’
// 以前这里“属性”这里是通过setter声明
extension A {
func setProperty(str: String) { } // 错误:方法"setProperty"
// 重复声明了Objective-C方法
//'setProperty:'
同样地检查在Objective-C中重写:
class B : NSObject {
func method(arg: String) { } // 注意:重写操作
// 这里含有类型:'(String) -& ()'
class C : B {
func method(arg: [String]) { } // 错误: 重写的选择器方法含有不匹配的类型'([String]) -& ()'
和协议的适配性一样:
class MyDelegate : NSObject, NSURLSessionDelegate {
func URLSession(session: NSURLSession, didBecomeInvalidWithError: Bool){ }
// 错误:Objective-C 方法 'URLSession:didBecomeInvalidWithError:'
//由方法提供: 'URLSession(_:didBecomeInvalidWithError:)'
// 和可选类型的需求方法相冲突:
// 'URLSession(_:didBecomeInvalidWithError:)' 在协议
// 'NSURLSessionDelegate'
Swift语言Bug修复
动态转换符(“as!”, “as?“和“is”)现在可以用在Swift的协议类型上,只要该协议类型没有关联类型。
在Playground增加的一致性需求现在可以按照预期工作了,比如:
struct Point {
var x, y: Double
extension Point : Printable {
var description: String {
return "(\(x), \(y))"
var p1 = Point(x: 1.5, y: 2.5)
println(p1) // prints "(1.5, 2.5)”
导入的没有文档化的NS_ENUM类型,比如UIViewAnimationCurve,现在可以通过init(rawValue:) 构造器从它的原始整型类型转换出来而不会重设为nil,为解决这个问题而用替代方法unsafeBitCast编写的代码现在可以使用原始值构造器编写了。比如:
let animationCurve =
unsafeBitCast(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue,
UIViewAnimationCurve.self)
现在可以写为:
let animationCurve = UIViewAnimationCurve(rawValue:
userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)!
在枚举类型中负浮点数可以用作原始值了。
指向Objective-C类,或者Swift中继承自Objective-C对象的无主引用,在该无主引用指向的对象释放后无主引用被重新赋值时不会再Crash。
含有观察访问器的变量或者属性如果它可以从初始值表达式中推断出类型就无需显式指定类型。
NSClassFromString函数搜索失败时其结果和nil的比较现在工作正常。
子类中的重写基类含有可选类型的方法时,如果涉及到可选类型的转换将不会导致Crash。
class Base {
func foo(x: String) -& String? { return x }
class Derived: Base {
override func foo(x: String?) -& String { return x! }
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章}

我要回帖

更多关于 xcode swift 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信