2014-07-03 23 views
5

SCNetworkReachabilityFlags değişkenim var ve belirli değerleri kontrol etmek istiyorum, ör. ağa WWAN üzerinden ulaşılabilir.Swift'de bayraklar için bit grafikleri (özellikle SCNetworkReachabilityFlags) nasıl kontrol edilir?

SCNetworkReachabilityFlags türü UInt32 için typealias ve çeşitli seçenekler Int değişkenleri olarak tanımlanmıştır. Objective-C aşağıdaki yapabileceğini kullanma

: Swift ise

if (flags & kSCNetworkReachabilityFlagsIsWWAN) { 
// do stuff 
} 

bu denerseniz:

if reachabilityFlags & kSCNetworkReachabilityFlagsIsWWAN { 
// do stuff 
} 

bir derleyici hatası alıyorum: Could not find an overload for '&' that accepts the supplied arguments.

RawOptionSet yapısı olarak tanımlanmış bitfield seçeneklerinin bulunduğu diğer bazı soruları okudum. Bu SCNetworkReachability'da yapılmadı.

Swift bayraklarını nasıl kontrol edersiniz?

cevap

4

Bu hata aslında bayraklar denetiminizin argümanlarından değil, dönüş değeri hakkında şikayet ediyor. Bir if bildirimi, bir boolean (veya en azından Logical ile uyumlu bir şey) bekler, ancak iki Int için & işleci bir Int döndürür. Sadece kendi if açıklamada karşılaştırmasını gerekir:

let reachabilityFlags:SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) 
if 0 != reachabilityFlags & SCNetworkReachabilityFlags(kSCNetworkReachabilityFlagsReachable) { 
    println("reachabilityFlags contains kSCNetworkReachabilityFlagsReachable") 
} 
: SCNetworkReachabilityFlags yana

let flags = kSCNetworkReachabilityFlagsReachable 
if 0 != flags & kSCNetworkReachabilityFlagsReachable { 
    println("flags contains kSCNetworkReachabilityFlagsReachable") 
} 

ve sabitler (garip) farklı türde, sen karşılaştırma çalışması için bazı döküm yapmak gerekir