实例成员“可达性”不能用于“CMNetworkManager”类型

Posted

技术标签:

【中文标题】实例成员“可达性”不能用于“CMNetworkManager”类型【英文标题】:Instance member 'reachability' cannot be used on type 'CMNetworkManager' 【发布时间】:2020-11-30 05:00:28 【问题描述】:
import Foundation
import Reachability

class CMNetworkManager: NSObject 

    let reachability = try! Reachability()
    
    override init() 
        super.init()
        

    class func isReachable() -> Bool 
        // deprecated
        // return self.sharedInstance.reachability.isReachable
        return reachability.connection != .none
    

    class func isReachableViaWifi() -> Bool 
        //deprecated
        //return self.sharedInstance.reachability.isReachableViaWiFi
        return reachability.connection == .wifi
    

    class func isReachableViaWWAN() -> Bool 
        // deprecated
        // return self.sharedInstance.reachability.isReachableViaWWAN
        return reachability.connection == .cellular
    
    class func testCodeFromDocumentation () 
    reachability.whenReachable =  reachability in
        if reachability.connection == .wifi 
            print("Reachable via WiFi")
         else 
            print("Reachable via Cellular")
        
    
    reachability.whenUnreachable =  _ in
        print("Not reachable")
    

    do 
        try reachability.startNotifier()
     catch 
        print("Unable to start notifier")
    


每当使用reachability.something 时,Xcode 中都会出现此错误:

实例成员“可达性”不能用于类型 'CMNetworkManager'


注意:

here 提到的答案不适用于我的示例。 (确保您没有尝试修改类而不是实例)。我在这里修改一个实例(可达性)

【问题讨论】:

【参考方案1】:

问题是您试图从类型方法访问实例属性。您要么需要将所有方法设为实例方法,要么将属性设为类型属性。

static let reachability = try! Reachability() 将解决您的问题,因为这会使该属性成为类型属性。

另外,Swift 中不需要 NSObject 继承。

【讨论】:

以上是关于实例成员“可达性”不能用于“CMNetworkManager”类型的主要内容,如果未能解决你的问题,请参考以下文章

这里出了啥问题:实例成员不能用于类型 [重复]

实例成员不能用于 struct swift 之间的嵌套类型的实例

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

实例成员 'count' 不能用于类型 'TweetFilterOptions.AllCases'

在 awakeFromNib() 上 - 错误实例成员 'button' 不能用于类型 'CustomView'

实例成员不能用于类型视图控制器