NSLocale objectForKey方法的隐式返回类型是什么?

时间:2014-09-11 18:01:16

标签: ios swift uisegmentedcontrol nslocale

我有一个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的实际类型?

感谢。

1 个答案:

答案 0 :(得分:2)

documentation

  

NSLocaleUsesMetricSystem

     

标志的键,指示语言环境是否使用度量标准   系统。相应的值是布尔NSNumber对象。如果   值为NO,您通常可以假设美国测量单位(for   例如,法规里程。)

您可以在运行时使用可选演员检查:

if let localeSystem = NSLocale.currentLocale().objectForKey(NSLocaleUsesMetricSystem) as? NSNumber {
   ...
}