不能用 'NSNumber' 类型的索引下标 '[Int : UIColor]' 类型的值



您好。我试图遵循本教程https://www.youtube.com/watch?v=3jJiqzbzutU,并收到以下错误消息:无法用NSNumber类型的索引为"[Int:UIColor]"类型的值下标。我做了他在教程中做的同样的事情,但这出了问题。请帮忙。错误来自的这行代码

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

这是我的代码供参考。

class ViewController: UIViewController, CLLocationManagerDelegate {
let locationManager = CLLocationManager()
let region1 = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "myuuidString")!, identifier: "skybeacon1")
let colors = [2: UIColor.redColor(), 1: UIColor.blueColor()]
override func viewDidLoad() {
    super.viewDidLoad()
    locationManager.delegate = self
    if CLLocationManager.authorizationStatus() != CLAuthorizationStatus.AuthorizedWhenInUse {
        locationManager.requestWhenInUseAuthorization()
    }
    locationManager.startRangingBeaconsInRegion(region1)
}
func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], 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.major]
    }
}
}

Hello如果您使用swift 4编程,请使用:

closestBeacon.major.intValue

而不是

closestBeacon.major.integerValue

CLBeacon.major是一个返回NSNumber的属性。只需使用closestBeacon.major.integerValue

NSNumberInt不同但有关联,只需投射(而非强制)

let closestBeacon = knownBeacons[0] // as CLBeacon is not needed, the compiler knows the type
self.view.backgroundColor = self.colors[closestBeacon.major as Int] 

最新更新