由关闭错误捕获的自我

时间:2017-06-19 11:04:24

标签: swift nsuserdefaults nscoding

var myGroup = DispatchGroup()

class Place: NSObject, NSCoding {

// Properties
var placeCoordinate: CLLocation!
var placeName: String!

// Methods
required init(coder aDecoder: NSCoder) {
    self.placeCoordinate = aDecoder.decodeObject(forKey: "placeCoordinate") as! CLLocation
    self.placeName = aDecoder.decodeObject(forKey: "placeName") as! String
}

init(latitude: CLLocationDegrees, longitude: CLLocationDegrees) {
    myGroup.enter()
    self.placeCoordinate = CLLocation(latitude: latitude, longitude: longitude)
    CLGeocoder().reverseGeocodeLocation(self.placeCoordinate, completionHandler: { (placemarks, error) -> Void in
        if error != nil {
            self.placeName = "Unrecognized"
            print(error!)
        } else {
            if let placemark = placemarks?[0] {
                self.placeName = (placemark.addressDictionary!["FormattedAddressLines"] as! [String])[1]
                myGroup.leave()
            }
        }
    })
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(placeCoordinate, forKey: "placeCoordinate")
    aCoder.encode(placeName, forKey: "placeName")
}
}

我已经构建了这个使用async函数的类,如您所见。

我想在UserDefaults保存此对象的数组。我发现在UserDefaults上保存自定义对象是不可能的,所以现在我正在尝试使用NSCoding

在上面的代码中我得到错误:

  

在所有成员初始化之前由闭包捕获的自我

reverseGeocodeLocation函数行的构造函数中。

在添加NSCoding部分之前,需要提及以下代码。

1 个答案:

答案 0 :(得分:0)

[weak self]中使用capture list closure作为:

CLGeocoder().reverseGeocodeLocation(self.placeCoordinate, completionHandler: {[weak self] (placemarks, error) -> Void in
            //...
        })