我正在用Swift检查系统信息。我发现,这可以通过代码来实现:
var sysData:CMutablePointer<utsname> = nil
let retVal:CInt = uname(sysData)
这段代码有两个问题:
sysData的初始值应该是什么?这个例子在retVal中给出-1可能是因为sysData为nil。 如何从sysData读取信息?
我正在用Swift检查系统信息。我发现,这可以通过代码来实现:
var sysData:CMutablePointer<utsname> = nil
let retVal:CInt = uname(sysData)
这段代码有两个问题:
sysData的初始值应该是什么?这个例子在retVal中给出-1可能是因为sysData为nil。 如何从sysData读取信息?
当前回答
对于iOS,请尝试:
var systemVersion = UIDevice.current.systemVersion
对于OS X,尝试:
var systemVersion = NSProcessInfo.processInfo().operatingSystemVersion
如果你只是想检查用户是否至少运行了一个特定的版本,你也可以使用以下Swift 2功能,它适用于iOS和OS X:
if #available(iOS 9.0, *) {
// use the feature only available in iOS 9
// for ex. UIStackView
} else {
// or use some work around
}
但不建议检查操作系统版本。最好检查您想要使用的功能在设备上是否可用,而不是比较版本号。 对于iOS,如前所述,你应该检查它是否响应选择器; 如:
if (self.respondsToSelector(Selector("showViewController"))) {
self.showViewController(vc, sender: self)
} else {
// some work around
}
其他回答
细节
Xcode 10.2.1 (10E1001)
链接
OperatingSystemVersion
解决方案
extension OperatingSystemVersion {
func getFullVersion(separator: String = ".") -> String {
return "\(majorVersion)\(separator)\(minorVersion)\(separator)\(patchVersion)"
}
}
let os = ProcessInfo().operatingSystemVersion
print(os.majorVersion) // 12
print(os.minorVersion) // 2
print(os.patchVersion) // 0
print(os.getFullVersion()) // 12.2.0
如果你正在使用Swift 2,并且你想要检查操作系统版本以使用某个API,你可以使用新的可用性特性:
if #available(iOS 8, *) {
//iOS 8+ code here.
}
else {
//Code for iOS 7 and older versions.
//An important note: if you use #availability, Xcode will also
//check that you don't use anything that was introduced in iOS 8+
//inside this `else` block. So, if you try to use UIAlertController
//here, for instance, it won't compile. And it's great.
}
我写这个答案是因为它是谷歌中swift 2 check系统版本查询的第一个问题。
斯威夫特5
我们不需要创建扩展,因为ProcessInfo给了我们版本信息。你可以在下面看到iOS的示例代码。
let os = ProcessInfo().operatingSystemVersion
switch (os.majorVersion, os.minorVersion, os.patchVersion) {
case (let x, _, _) where x < 8:
print("iOS < 8.0.0")
case (8, 0, _):
print("iOS >= 8.0.0, < 8.1.0")
case (8, _, _):
print("iOS >= 8.1.0, < 9.0")
case (9, _, _):
print("iOS >= 9.0.0")
default:
print("iOS >= 10.0.0")
}
参考:http://nshipster.com/swift-system-version-checking/
我做了帮助函数,从下面的链接转移到swift:
我们如何通过程序检测设备运行的iOS版本?
func SYSTEM_VERSION_EQUAL_TO(version: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(version,
options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedSame
}
func SYSTEM_VERSION_GREATER_THAN(version: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(version,
options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending
}
func SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(version: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(version,
options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedAscending
}
func SYSTEM_VERSION_LESS_THAN(version: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(version,
options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedAscending
}
func SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(version: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(version,
options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedDescending
}
它可以这样使用:
SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO("7.0")
斯威夫特4.2
func SYSTEM_VERSION_EQUAL_TO(version: String) -> Bool {
return UIDevice.current.systemVersion.compare(version, options: .numeric) == .orderedSame
}
func SYSTEM_VERSION_GREATER_THAN(version: String) -> Bool {
return UIDevice.current.systemVersion.compare(version, options: .numeric) == .orderedDescending
}
func SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(version: String) -> Bool {
return UIDevice.current.systemVersion.compare(version, options: .numeric) != .orderedAscending
}
func SYSTEM_VERSION_LESS_THAN(version: String) -> Bool {
return UIDevice.current.systemVersion.compare(version, options: .numeric) == .orderedAscending
}
func SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(version: String) -> Bool {
return UIDevice.current.systemVersion.compare(version, options: .numeric) != .orderedDescending
}
对于iOS,请尝试:
var systemVersion = UIDevice.current.systemVersion
对于OS X,尝试:
var systemVersion = NSProcessInfo.processInfo().operatingSystemVersion
如果你只是想检查用户是否至少运行了一个特定的版本,你也可以使用以下Swift 2功能,它适用于iOS和OS X:
if #available(iOS 9.0, *) {
// use the feature only available in iOS 9
// for ex. UIStackView
} else {
// or use some work around
}
但不建议检查操作系统版本。最好检查您想要使用的功能在设备上是否可用,而不是比较版本号。 对于iOS,如前所述,你应该检查它是否响应选择器; 如:
if (self.respondsToSelector(Selector("showViewController"))) {
self.showViewController(vc, sender: self)
} else {
// some work around
}