我有一个UIViewController
的iOS项目,其中包含名为UISegmentedControl
的{{1}}。我希望sizeSegmentedControl
在其left segmentIndex中显示sizeSegmentedControl
(厘米),在其右段segmentIndex中显示cm
(英寸)。当我构建项目时,我还希望in
选择与设备区域设置长度单位对应的segmentIndex。因此,我从以下代码开始:
sizeSegmentedControl
使用此代码一切正常但我知道在不使用可选绑定(import UIKit
class ViewController: UIViewController {
@IBOutlet weak var sizeSegmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
sizeSegmentedControl.setTitle(NSLengthFormatter().unitStringFromValue(0, unit: .Centimeter), forSegmentAtIndex: 0)
sizeSegmentedControl.setTitle(NSLengthFormatter().unitStringFromValue(0, unit: .Inch), forSegmentAtIndex: 1)
sizeSegmentedControl.selectedSegmentIndex = NSLocale.currentLocale().objectForKey(NSLocaleUsesMetricSystem)!.boolValue == true ? 0 : 1
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
返回-objectForKey:
)内展开可选项是不安全的。所以我将AnyObject?
内的代码更改为:
-viewDidLoad
此代码有效但问题是我怀疑sizeSegmentedControl.setTitle(NSLengthFormatter().unitStringFromValue(0, unit: .Centimeter), forSegmentAtIndex: 0)
sizeSegmentedControl.setTitle(NSLengthFormatter().unitStringFromValue(0, unit: .Inch), forSegmentAtIndex: 1)
if let localeSystem: AnyObject = NSLocale.currentLocale().objectForKey(NSLocaleUsesMetricSystem) {
sizeSegmentedControl.selectedSegmentIndex = localeSystem.boolValue == true ? 0 : 1
}
是AnyObject
的真实类型。我查看了let localeSystem
和 NSLocale类参考文档,但无法找到更多类型。所以我的问题是:我怎么知道NSLocale.h
的实际类型?
感谢。
答案 0 :(得分:2)
NSLocaleUsesMetricSystem
标志的键,指示语言环境是否使用度量标准 系统。相应的值是布尔NSNumber对象。如果 值为NO,您通常可以假设美国测量单位(for 例如,法规里程。)
您可以在运行时使用可选演员检查:
if let localeSystem = NSLocale.currentLocale().objectForKey(NSLocaleUsesMetricSystem) as? NSNumber {
...
}