静态类函数:实例成员不能用于类型

Posted

技术标签:

【中文标题】静态类函数:实例成员不能用于类型【英文标题】: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(),您希望发生什么? 我知道在类型上调用了一个静态方法。我不理解无法在静态方法中调用的实例成员的错误。为什么会出现这个错误 是否有解决方法或正确的方法来继续 【参考方案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

【讨论】:

以上是关于静态类函数:实例成员不能用于类型的主要内容,如果未能解决你的问题,请参考以下文章

静态成员“负载”不能用于“AppDelegate”类型的实例

静态类和类成员

内部类

深入理解C# 静态类与非静态类静态成员的区别

C# 静态类 考考你

类静态成员变量和静态成员函数的访问方式