属性初始值设定项在“self”可用之前运行错误 Swift [重复]

问题描述 投票:0回答:2

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

enter image description here

我应该使用异步调度还是类似的东西?我尝试了很多方法,例如将所有内容放入 viewDidLoad() 但没有成功。有人可以帮忙吗?

ios swift
2个回答
2
投票

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

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

请注意,每次访问时都会重新计算,因此如果

chosed
发生变化,
searchURL
也会发生变化。您还可以将其设置为隐式展开的可选选项,如 Paulo Mattos 的答案,或者您可以创建一个将
chosed
作为参数的初始值设定项(请参阅下面的注释,以了解警告)。然后您可以在
searchURL
中设置
init

另外,只是想告诉你,Swift 标准是使用驼峰式大小写变量(

searchURL
而不是
SearchURL
)。


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 的建议使用

计算属性

© www.soinside.com 2019 - 2024. All rights reserved.