2014-09-11 4 views
2

У меня есть проект iOS с UIViewController, который содержит UISegmentedControl под названием sizeSegmentedControl. Я хочу, чтобы sizeSegmentedControl отображал cm (для сантиметра) в левом сегментеIndex и in (для дюйма) в своем правом сегментеIndex. Когда я создаю проект, я также хочу, чтобы 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 Reference, но не смог найти больше по его типу. Поэтому мой вопрос: как я могу узнать реальный тип let localeSystem?

Спасибо.

+0

Может ли это быть 'NSNumber'? Кажется, он работает с 'NSNumber' ... –

ответ

2

В documentation состояния

NSLocaleUsesMetricSystem

Ключ для флага, который указывает, использует ли локаль метрическую систему . Соответствующим значением является объект Boolean NSNumber. Если значение НЕТ, обычно вы можете принять американские единицы измерения (например, для цифры ).

и вы можете проверить, что во время выполнения с дополнительным броском:

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

 Смежные вопросы

  • Нет связанных вопросов^_^