实例成员不能用于嵌套类型的实例?

use*_*242 6 enums uiviewcontroller ios swift

我在下面有以下代码,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"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是:

“ViewController”类型的实例成员“manager”不能用于嵌套类型“ViewController.Link”的实例

cat*_*ore 12

我会将计算变量放入类级别:

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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Eil*_*lon 8

您正在尝试访问ViewController单独的代码环境中的类的属性,即 enum 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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每当您访问枚举值时,请传递您的manager属性。

print(Link.tos(self.manager!).url
Run Code Online (Sandbox Code Playgroud)