发布于 2015-02-06 13:53:55 | 234 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Swift教程,程序狗速度看过来!

Swift编程语言

SWIFT,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。


虽然说Swift是“没有C的Objective-C”这种说法是不够准确的,但这是因为Swift和Objective-C缺少相似之处,不是没有C,而是Swift根本不是类C语言。

毫无疑问Swift从Haskell、Rust、Python、D语言等现代编程语言里获得灵感,但你最好把它理解成拒绝了C语言中一些坏掉地方的语言:

· C语言是默认类型不安全的。Swift则默认为安全(因此Swift中的指针操作函数命名中加上unsafe)(译者注:见在Swift中使用遗留的C API)。

· C语言拥有未定义的行为,Swift中的行为都是经过良好定义的(至少是理论上的,因为编译工具还有些工作要做)。

· C语言使用一些非常不安全的预处理器指令能力,Swift则只使用预处理器指令的安全子集。

甚至可以说Swift类型系统的设计,是因为对C++类型系统的不满发泄而来的。

在Objective-C里,检查API的可用性是通过C语言预处理指令来完成的,在class, respondsToSelector:以及instancesRespondToSelector:上的条件式为:

#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
if ([NSURLSession class] &&
    [NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) {
    // ...
}
#endif

然而,就像之前提到的,Swift的编译器指令是非常强约束的,只允许针对特定操作系统和平台来做编译器标记和条件式编辑。

#if DEBUG
    println("OTHER_SWIFT_FLAGS = -D DEBUG")
#endif

 相应函数和对应的有效参数分别为:

OS():OSX, iOS

arch():x86_64, arm, arm64, i386

#if os(iOS)
    var image: UIImage?
#elseif os(OSX)
    var image: NSImage?
#endif

不幸的是,os()不提供特定版本的OS X和iOS的深度信息,表明检查发生在运行时。并且由于Swift对处理nil的不太宽容,对Objective-C风格的常量进行检查会导致程序崩溃。

那么,你应该如何检查Swift中的系统信息来确定API的可用性呢?下面我们就来谈谈。

NSProcessInfo

预料到开发者对检查系统版本同时又对Swift友好的API的需求,iOS 8在NSProcessInfo中引入了operatingSystemVersion属性和 isOperatingSystemAtLeastVersion方法。两个API都使用了新的NSOperatingSystemVersion数值类 型,它包括majorVersion、minorVersion和patchVersion。

Tips:苹果软件发布的版本号遵循语义化版本约定。

isOperatingSystemAtLeastVersion

对一个简单的检查,比如“这个app能在iOS 8运行吗?” isOperatingSystemAtLeastVersion是最简单明了的方式。

if
NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion:
 8, minorVersion: 0, patchVersion: 0)) {
println("iOS >= 8.0.0")
}

operatingSystemVersion

为了更复杂的版本比较,operatingSystemVersion能够被直接检查。将它和Swift模式比较和switch语句组合,可以使得代码更简洁。

let os = NSProcessInfo().operatingSystemVersion
switch (os.majorVersion, os.minorVersion, os.patchVersion) {
case (8, _, _):
    println("iOS >= 8.0.0")
case (7, 0, _):
    println("iOS >= 7.0.0, = 7.1.0, < 8.0.0")
default:
    println("iOS = 8.0")
case .OrderedAscending:
    println("iOS = 10.10")
}

Tips:苹果在示例代码中使用rint来完成NSAppKitVersionNumber的版本号比较。

将以上的总结一下,在Swift中检查系统版本总共有以下方法。

· 使用#if os(iOS)预编译指令来区别iOS(UIKit)和OS X(AppKit)目标。

· 当最低目标适配为iOS 8以上时,使用NSProcessInfo operatingSystemVersion 或isOperatingSystemAtLeastVersion。

· 如需适配iOS 7或以下的设备,使用UIDevice systemVersion上的compare和 NSStringCompareOptions.NumericSearch。

· 如果是为OS X开发,使用NSAppKitVersionNumber比较生效的AppKit常量。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务