Xcode 8.0 Beta发布,详解Swift语言的重大变化
2019-03-25 10:23:49 来源:沈阳软件公司 作者:沈阳软件开发
let x = NSFoo(value: NSNumber(integer: 0))
let y: AnyObject = x
let z = y as! NSFoo // Succeeds
Swift中的子类仅能继承自ObjC泛型类中指定了全泛型列表参数的泛型类。
// 错误:因为这里泛型参数没有明确化
class SwiftFoo1<T>: NSFoo<T> { }
// 正确:这里的泛型参数明确化了
class SwiftFoo2<T>: NSFoo<NSString> { }
Swift可以扩展ObjC的泛型类,但是这时的扩展不能增加约束特性,并且扩展定义内部不能访问泛型参数。
extension NSFoo {
//错误:不能访问泛型参数T
func foo() -> T
{ ret软件开发
urn T() } }
// 错误:不能为扩展增加约束
NSFoo where T: NSString { }
}
Foundation中的容器NS[Mutable]Array, NS[Mutable]Set, and NS[Mutable]Dictionary依然以非泛型的方式导入到Swift中。
类型UnsafePointer、UnsafeMutablePointer、AutoreleasingUnsafeMutablePointer、OpaquePointer、Selector和NSZone被表示为非空指针,所谓非空指针指这些指针类型变量永远不能为nil。而可为空指针被表示为可选类型,例如:UnsafePointer?。对于C类型指针中的基本类型指针要注意它们的可为空特性:
一个被标记为_Nonnull的指针或者放在NS_ASSUME_NONNULL_BEGIN/_END块中的指针将会以非可选类型的方式导入。
例如::NSInteger * _Nonnull 被导入为UnsafeMutablePointer。
一个被标注为_Nullable的指针被导入为可选类型值。例如:NSInteger * _Nullable将会被导入为UnsafeMutablePointer?。
一个被标记为_Null_unspecified的指针或者不处于任何NS_ASSUME_NONNULL_BEGIN/_END块中的指针将会以隐式解封可选类型值得方式导入到Swift中,例如:NSInteger * _Null_unspecified将会被导入为:UnsafeMutablePointer!。
如果想给一个使用C类型参数的函数传递一个可空类型的指针,Swift不允许直接传递需指定指针的宽度和类型,这里以Int类型的指针的为例:
Int(bitPattern: nullablePointer)
注释会被看作为空格,所以下面这种方式是正确的:
if /*comment*/!foo { ... }
1 +/*comment*/2
但是如果用在一元操作符中则不行,比如:
foo/* comment */! // no longer works
关于inout参数标记符号移到了“:“之后参数类型之前,如:
func foo(inout x: Int) { }
改为:
func foo(x: inout Int) { }
@noescape 和@autoclosure属性现在必须用在参数类型之前而不是参数名称之前。
被导入为NS_OPTIONS set类型中none成员现在不能用了,现在直接使用“[]”而不是调用none成员。
对于属性赋值现在现在采用”:”而不是“=”,这种用法和函数参数调用保持一致了。[SE-0040]
现在支持泛型别名了,例如:[SE-0048]
typealias StringDictionary = Dictionary
typealias IntFunction = (T) -> Int
typealias MatchingTriple = (T, T, T)
typealias BackwardTriple = (T3, T2, T1)
@noescape属性可以扩展到很多泛型类型中,你现在可以声明一个@noescape属性的函数类型值,比如对于柯里化函数的签名,当然你也可以声明具有@noescape属性的本地变量,也可以把@noescape用在类型别名中,例如:
func apply(f: @noescape T -> U,
g: @noescape (@noescape T -> U) -> U) -> U
{
return g(f)
}
对于异常处理模块,可以在catch语句的rethrows函数中抛出错误,例如:
func process(f: () throws -> Int)
rethrows -> Int {
do { return try f()
}catch is SomeError
{
throw OtherError()
“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与
我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同
其观点或证实其内容的真实性。
热门文章
使用“扫一扫”即可将网页分享至朋友圈。