无法使用 'NSNumber' 类型的索引下标“[Int : UIColor]”类型的值
Cannot subscript a value of type '[Int : UIColor]' with an index of type 'NSNumber'
美好的一天。我试图遵循本教程 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{ [=11=] .proximity != CLProximity.Unknown }
if knownBeacons.count > 0 {
let closestBeacon = knownBeacons[0] as CLBeacon
self.view.backgroundColor = self.colors[closestBeacon.major]
}
}
}
CLBeacon.major
是 属性,returns 是 NSNumber
。只需使用 closestBeacon.major.integerValue
NSNumber
和Int
有区别但有关联,直接投就可以了(不强求)
let closestBeacon = knownBeacons[0] // as CLBeacon is not needed, the compiler knows the type
self.view.backgroundColor = self.colors[closestBeacon.major as Int]
您好,如果您在 swift4 中编程,请使用:
closestBeacon.major.intValue
而不是
closestBeacon.major.integerValue
美好的一天。我试图遵循本教程 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{ [=11=] .proximity != CLProximity.Unknown }
if knownBeacons.count > 0 {
let closestBeacon = knownBeacons[0] as CLBeacon
self.view.backgroundColor = self.colors[closestBeacon.major]
}
}
}
CLBeacon.major
是 属性,returns 是 NSNumber
。只需使用 closestBeacon.major.integerValue
NSNumber
和Int
有区别但有关联,直接投就可以了(不强求)
let closestBeacon = knownBeacons[0] // as CLBeacon is not needed, the compiler knows the type
self.view.backgroundColor = self.colors[closestBeacon.major as Int]
您好,如果您在 swift4 中编程,请使用:
closestBeacon.major.intValue
而不是
closestBeacon.major.integerValue