属性初始化程序在“自我”之前运行可用错误Swift

时间:2017-05-03 19:22:18

标签: ios swift xcode api

我有一个SearchURL字符串,它从前一个视图控制器获取选择变量。有了这个变量,SearchURL应该用在callAlamo函数中。但我有一个错误:

enter image description here

我应该使用异步调度还是这样的?我尝试过很多东西,比如将所有东西放在viewDidLoad()中但是没有用。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用计算属性

var searchURL: String {
   return "https://theurlIcantcopybecauseitsascreenshot.com/\(chosed!)"
}

请注意,每次访问时都会重新计算,因此如果chosed发生更改,searchURL也会发生变化。您也可以将其作为隐式解包的可选项,例如Paulo Mattos的答案,或者您可以创建一个以chosed作为参数的初始值设定项(请参阅下面的注释,以获取警告)。然后,您可以在searchURL中设置init

另外,只是一个让你知道的挑剔,Swift标准是在驼峰的情况下使用变量(searchURL而不是SearchURL)。

答案 1 :(得分:1)

每次进入视图控制器时,viewDidLoad都不会被称为 ,因此,您可能无法检测到chosed属性的更新(以及其他棘手的问题)。

您可以使用viewWillAppear方法代替:

var SearchURL: String!

overide func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    SearchURL = "...\(chosed!)..."
    ...
}

或者您可以使用 lazy 变量:

lazy var SearchURL = {
    return "...\(self.chosed!)..."
}()

或者使用下面Connor Neville建议的计算属性