【问题标题】:Instance member cannot be used on instance of nested type?实例成员不能用于嵌套类型的实例?
【发布时间】:2020-04-07 21:20:20
【问题描述】:
我在下面有以下代码,Xcode 不断给我一个错误,我不明白如何解决。
class ViewController: UIViewController {
private var manager: Manager?
enum Link {
case faq
case tos
var url: String {
switch self {
case .faq:
return "www.google.com"
case .tos:
return manager!.isFreeUser ? "www.google.com" : "www.duckduckgo.com"
}
}
}
}
错误是:
“ViewController”类型的实例成员“manager”不能用于嵌套类型“ViewController.Link”的实例
【问题讨论】:
标签:
ios
swift
enums
uiviewcontroller
【解决方案1】:
我会将计算变量放到类级别:
class ViewController: UIViewController {
private var manager: Manager?
enum Link {
case faq
case tos
}
var link: Link = .tos
var url: String {
switch link {
case .faq:
return "www.google.com"
case .tos:
return manager!.isFreeUser ? "www.google.com" : "www.duckduckgo.com"
}
}
}
【解决方案2】:
您正试图在单独的代码环境中访问 ViewController 类的属性,即枚举 Link。
一个简单的解决方案是传递你的值,在这种情况下,manager 作为枚举的参数,如下所示:
enum Link {
case faq
case tos(Manager)
var url: String {
switch self {
case .faq:
return "www.google.com"
case .tos(let manager):
return manager.isFreeUser ? "www.google.com" : "www.duckduckgo.com"
}
}
}
每当您访问枚举值时,请传入您的 manager 属性。
print(Link.tos(self.manager!).url