2015-09-02 2 views
1

У меня есть этот массив с некоторыми UIColors:Как получить UIColor из ассоциативного массива в Swift

let colors = [ 
    35302: UIColor(red: 66/255, green: 55/255, blue: 101/255, alpha: 1), 
    53350: UIColor(red: 158/255, green: 218/255, blue: 222/255, alpha: 1), 
    54747: UIColor(red: 158/255, green: 222/255, blue: 189/255, alpha: 1) 
] 

Теперь я пытаюсь получить доступ к какому-то индексу в массиве:

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) { 
    let knownBeacons = beacons.filter{ $0.proximity != CLProximity.Unknown } 
    if(knownBeacons.count > 0) { 
     let closestBeacon = knownBeacons[0] as! CLBeacon 
     self.view.backgroundColor = self.colors[closestBeacon.minor] 
    } 
} 

Линия :

self.view.backgroundColor = self.colors[closestBeacon.minor] 

Я получаю эту ошибку:

Cannot subscript a value of type '[Int: UIColor]' with an index of type 'NSNumber' 

Я пытаюсь создать HelloWorld с моими новыми маяками, и я застрял в этой части. Я хотел бы понять, как это действительно работает.

Благодаря

+0

Термин Swift/Objective-C для объекта коллекции вы используете словарь, а не «ассоциативный массив». Это хорошая идея, чтобы узнать «родные» условия для вещей. (Не пытаюсь быть трудным. Я знаком с термином ассоциативный массив из информатики, но он все равно бросил меня на мгновение.) –

ответ

2

используется NSNumber но массив требует Int в качестве индекса. Выберите один из следующих вариантов:

self.view.backgroundColor = self.colors[closestBeacon.minor as Int] 
self.view.backgroundColor = self.colors[closestBeacon.minor.integerValue] 
self.view.backgroundColor = self.colors[Int(closestBeacon.minor)] 

Вы также можете проверить этот вопрос Swift convert object that is NSNumber to Double

+0

Спасибо за объяснение! ; D –

2

Судя по всему, closestBeacon.minor является NSNumber, а цвета индексируются Int.

Вы можете использовать closestBeacon.minor.integerValue

+0

Спасибо большое! –

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