【发布时间】:2018-01-18 18:14:05
【问题描述】:
我的 ViewController 看起来像这样:
class ViewController: UIViewController {
... (Optional Variables declared)
var geoLoc: CLLocationCoordinate2D?
override func viewDidLoad() {
... (Optional Variables initialized)
geocoder.geocodeAddressString(addressString) { (placemarks, error) in
self.geoLoc = placemarks?[0].location?.coordinate
}
}
}
我收到此错误:
'self' captured by a closure before all members were initialized
我尝试了许多死胡同,但根本找不到问题的原因。有什么建议吗?
【问题讨论】:
-
您在 ViewController 中还创建了哪些其他属性?类的所有属性都必须先初始化,然后才能在类中的任何位置使用 self。
-
这看起来不像你应该得到这个错误的地方。您确定此代码不在
init中吗?您是否实现了自定义init?这真的是错误出现的地方吗?在viewDidLoad看到这个错误很奇怪。 -
这是一种奇怪的行为。 Swift 应该输出错误消息:'self' 在所有成员被初始化之前由闭包捕获 仅在初始化程序中。看来你遗漏了太多。 (例如,您的班级缺少
: UIViewController。)请显示更多可以重现您的问题的代码。 -
@OOPer 似乎问题在于 Xcode 将我的其他变量视为未初始化(即使它们已在此代码上方初始化),因此它不允许我在类上使用
self前缀.解决此问题的方法是为我的变量提供默认值。 -
感谢您的报告。如果您可以在您的问题中包含足够的代码来重现,那么该报告对于更多的开发人员来说会更有价值。
标签: swift swift3 core-location