簡體   English   中英

我可以在CLCircularRegion中設置值嗎?

[英]Could I set value in CLCircularRegion?

我正在使用CLCircularRegion開發應用程序。

我想在CLCircularRegion設置值。 所以我做了region.setValue(forKey:key)但它顯示

        if CLLocationManager.locationServicesEnabled() {
            for obj in pushInfoArr! {
                let localLatiStr = obj["local_latit"] as! String
                let localLongitStr = obj["local_longit"] as! String
                let localMsg = obj["local_mesg"] as! String
                let url = obj["cnnct_url"] as! String
                let localLati = Double(localLatiStr)
                let localLongi = Double(localLongitStr)
                let center = CLLocationCoordinate2DMake(localLati!, localLongi!)
                region = CLCircularRegion(center: center, radius: 1000, identifier: localMsg)
                region.setValue(localMsg, forKey: "msg")
                region.setValue(url, forKey: "url")
                region.notifyOnEntry = true
                self.locationManager.startMonitoring(for: region)
            }
    }

“由於未捕獲的異常'NSUnknownKeyException'而終止應用程序,原因:'[setValue:forUndefinedKey:]:此類與鍵bb的鍵值編碼不兼容”

我可以在CLCircularRegion設置value(url) CLCircularRegion

Swift不是Javascript-您無法在現有的類或結構上創建新屬性,並且CLCircularRegion繼承的CLCircularRegionCLRegion都不具有msgurl屬性。

您已經誤解了setValue作用-它是基類NSObject上的一種方法,該方法允許通過引用類的“名稱”或鍵來設置該類的現有屬性。 不建議在Swift中使用它(這是Objective-C的傳統)。

您需要做的是創建一個既包含區域又包含所需屬性的結構或子類:

struct MyRegion {
    var region: CLCircularRegion
    var msg: String
    var url: String
}

要么

class MyRegion: CLCircularRegion {
    var msg: String
    var url: String
    init(centre: CLLocationCoordinate2D, radius: Double, identifier: String, msg: String, url: String) {
        super.init(centre: centre, radius: radius, identifier: identifier)
        self.msg = msg
        self.url = url
    }
}

ps不要將“ url”用作不是URL的屬性的名稱,請使用“ urlString”或類似名稱。 我只是用它來對應您問題的術語。

不,CLCircularRegion沒有名為url的屬性,因此您不能在該類型的對象上設置url。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM