2017-01-06 34 views
0

我尝试使用Apple提供的Reachability类。在Swift 3中使用Objective C typedef枚举的错误

它有一个Objective-C枚举这样的:

typedef enum : NSInteger { 
    NotReachable = 0, 
    ReachableViaWiFi, 
    ReachableViaWWAN 
} NetworkStatus; 

而且在斯威夫特我做这样的事情:

if let networkReachability = notification.object as? Reachability { 
    let remoteHostStatus = networkReachability.currentReachabilityStatus() 
    let center = NotificationCenter.default 
    var notificationKey: String 

    if (remoteHostStatus == NetworkStatus.NotReachable) { 
     ... 
    } 
} 

但我得到的错误:

Type 'NetworkStatus' has no member 'NotReachable'

我做错了什么?我如何在Swift中使用Objective-C enum

+0

只有使用'NS_ENUM'标记的枚举被导入为Swift'enum'类型。这是在“使用可可和Objective-C的Swift”参考文献*中记录的。 –

回答

1
typedef enum : NSInteger { 
    NotReachable = 0, 
    ReachableViaWiFi, 
    ReachableViaWWAN 
} NetworkStatus; 

这是一个“普通的” C枚举。所以它没有命名空间到达Swift;可以使用名称NotReachableReachableViaWiFiReachableViaWWAN直接。请注意,没有前面的点(.)。

+1

有关此主题的更多信息,请参阅我的在线图书:http://www.apeth.com/swiftBook/apa.html#_c_enums – matt

1

如果你定义枚举如下一样,这将是访问为NetworkStatus.NotReachable,等:

typedef NS_ENUM(NSInteger, NetworkStatus) { 
    NotReachable = 0, 
    ReachableViaWiFi, 
    ReachableViaWWAN 
};