sizeSegmentedControl
이라는 UISegmentedControl
이 포함 된 UIViewController
의 iOS 프로젝트가 있습니다. sizeSegmentedControl
은 왼쪽 segmentIndex에 cm
(센티미터 용)을 표시하고 오른쪽 segmentIndex에는 in
(인치 용)을 표시합니다. 프로젝트를 빌드 할 때 sizeSegmentedControl
에서 장치 로캘 길이 단위에 해당하는 segmentIndex를 선택해야합니다.NSLocale objectForKey 메서드의 암시 적 반환 유형은 무엇입니까?
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.h
과 NSLocale 클래스 참조 설명서를 살펴 보았지만 해당 유형에 대해 더 이상 찾을 수 없습니다. 그래서 내 질문은 : let localeSystem
의 실제 유형을 어떻게 알 수 있습니까?
감사합니다.
그것이'NSNumber' 수 있을까? 그것은'NSNumber'와 함께 작동하는 것 같습니다 ... –