Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 实例成员不能用于嵌套类型的实例?_Ios_Swift_Enums_Uiviewcontroller - Fatal编程技术网

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

Ios 实例成员不能用于嵌套类型的实例?,ios,swift,enums,uiviewcontroller,Ios,Swift,Enums,Uiviewcontroller,我有下面的代码,Xcode一直给我一个错误,我不知道如何解决 class ViewController: UIViewController { private var manager: Manager? enum Link { case faq case tos var url: String { switch self { case .faq: r

我有下面的代码,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”的实例


您正试图在单独的代码环境中访问
ViewController
类的属性,即enum
链接

一个简单的解决方案是将值作为参数传递给枚举,在本例中为
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

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

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"
        }
    }
}