2014-09-11 2 views
2

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 
} 

를이 코드는 작동하지만 문제는 지금은 AnyObjectlet localeSystem의 실제 유형의 의심이다. NSLocale.hNSLocale 클래스 참조 설명서를 살펴 보았지만 해당 유형에 대해 더 이상 찾을 수 없습니다. 그래서 내 질문은 : let localeSystem의 실제 유형을 어떻게 알 수 있습니까?

감사합니다.

+0

그것이'NSNumber' 수 있을까? 그것은'NSNumber'와 함께 작동하는 것 같습니다 ... –

답변

2

documentation 상태

NSLocaleUsesMetricSystem

로케일 메트릭 시스템을 사용할지 여부를 나타내는 플래그의 키

. 해당 값은 부울 NSNumber 개체입니다. 값이 NO이면 일반적으로 미국 측정 단위를 가정 할 수 있습니다 ( 예 : 법령 마일).

당신은 옵션 캐스트와 런타임에 것을 확인할 수 있습니다

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