如何在 swift 4 的闭包中分配类属性
Posted
技术标签:
【中文标题】如何在 swift 4 的闭包中分配类属性【英文标题】:How do I assign a class property within a closure in swift 4 【发布时间】:2019-03-03 15:41:12 【问题描述】:我正在尝试访问位置数据,从中获取城市名称,然后将其分配给一个变量,以便我可以在其他地方使用它。它从闭包内打印出变量很好,但是当我尝试通过我创建的类变量访问它时它为零,代码如下,谢谢。
class NewPostViewController: BaseViewController
@IBOutlet weak var postBodyTextField: UITextField!
var city: String?
@IBAction func createPostAction(_ sender: Any)
getCity()
db.collection("posts").document().setData([
"body": postBodyTextField.text,
"location": city,
"user": user?.displayName
]) err in
if let err = err
print("Error writing document: \(err)")
else
print("Document successfully written!")
override func viewDidLoad()
super.viewDidLoad()
func getCity()
Locator.currentPosition(accuracy: .city, onSuccess: location in
let geocoder: CLGeocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location, completionHandler: location, error in
if let location = location
self.city = location[0].locality
)
, onFail: _,_ in
print("Error, couldnt get current location")
)
【问题讨论】:
想想/谷歌什么是“异步”。您的代码未按编写顺序运行。您正在分配 toself.city
您尝试从 self.city
获取值。 "location": city
行 在 self.city = location[0].locality
行之前执行。
【参考方案1】:
将 db.collection("posts").document().setData
调用移动到 reverseGeocode 闭包中:
geocoder.reverseGeocodeLocation(location, completionHandler: location, error in
if let location = location
self.city = location[0].locality
db.collection("posts").document().setData( .... )
)
【讨论】:
以上是关于如何在 swift 4 的闭包中分配类属性的主要内容,如果未能解决你的问题,请参考以下文章