【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2021-09-14
        • 2015-11-27
        • 2016-05-23
        • 2016-01-01
        • 2016-09-09
        • 2020-01-16
        • 2017-06-25
        • 2016-07-05
        相关资源
        最近更新 更多