【问题标题】:static class functions : Instance member cannot be used on type静态类函数:实例成员不能用于类型
【发布时间】:2018-08-20 07:38:40
【问题描述】:

这个问题我已经有一段时间了。 我无法调用其中包含实例成员的静态函数。 我得到错误:

实例成员“matomoTracker”不能用于类型“Tracker”

class Tracker {

    let matomoTracker:MatomoTracker
    var isAllowed: Bool? //to implement based on UserSessions

    required init(id: String, url: String, isAllowed: Bool) {
        matomoTracker = MatomoTracker(siteId: id, baseURL: URL(string: url)!)
        matomoTracker.isOptedOut = isAllowed
    }

    public func track(category: String, eventDescription: String) {
        matomoTracker.track(eventWithCategory: "category", action: "action", name: nil, number: nil, url: nil)
    }

    static func dispatch() {
        Tracker.matomoTracker.dispatch()
    }

    static func startSession() {
         Tracker.matomoTracker.startNewSession()
    }
}

【问题讨论】:

  • 静态(类型)方法在类型上调用,而不是在特定实例上。如果您致电Tracker.dispatch(),您希望发生什么?
  • 我知道在类型上调用了一个静态方法。我不理解无法在静态方法中调用的实例成员的错误。为什么会出现这个错误
  • 是否有解决方法或正确的方法来继续

标签: swift function static


【解决方案1】:

带有前缀关键字静态或类的函数不能调用实例成员。这种函数只能使用静态或类成员。

这里你应该使用 static let matomoTracker = MatomoTracker() 或者如果您想稍后分配 matomoTracker,请使用

静态变量 matomoTracker:MatomoTracker?

如果你想了解更多关于静态和类的信息,请访问下面的 li

https://docs.swift.org/swift-book/LanguageGuide/Methods.html

https://docs.swift.org/swift-book/LanguageGuide/Methods.html

【讨论】:

    猜你喜欢
    • 2016-06-24
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多