2017-09-24 58 views
10
Ben here belirtildiği gibi cari cihazın iOS sürümü belirli bir sürümü altında yalnızca bir kod parçası çalıştırmak istiyorum

olumsuzlamaktadır. Apple tarafından verilen kod örnekleri şu şekilde görünür:Amaç-C @available anahtar kelime

if (@available(iOS 10.0, *)) { 
    // iOS 10.0 and above 
} else { 
    // below 10.0 
} 

Ancak kimse, mevcut iOS sürümü, belirli bir sürümü altında olması halinde kod çalıştırmasına istiyorum senaryo vardır. Aşağıdaki kod çalışacaktır varsayılır:

if ([email protected](iOS 10.0, *)) { 
    // below 10.0 
} 

çalışmadığını görünüyor Ancak, ve Xcode aşağıdaki uyarıyı alıyorum:

@available does not guard availability here; use if (@available) instead 

Here LLVM ekledi taahhüt edilir Gördüğüm tanı.

  1. if blok (çok zarif değil) herhangi bir kod eklemeden if-else varyantı kullanın:

    o sorunun iki olası geri dönüşün vardır.

  2. -[NSProcessInfo isOperatingSystemAtLeastVersion:] gibi eski yaklaşımları kullanmaya devam edin.

Eksik olduğum @available'u kullanmanın başka bir yolu var mı?

+1

Ben LLVM makaleyi okuduktan sonra bunu bir if başka koşul veya talimat '@ available' kullanamaz belirtmektedir. Yani temel olarak düşünebilmemin tek yolu boş bir “if” bedene sahip olmak ama “else” bloğu içindeki eylemi yapmak. Bu benim için tek yol gibi görünüyor. – cramopy

+0

"Ancak bu işe yaramaz gibi görünüyor ve Xcode'dan şu uyarıyı alıyorum:" Sadece bir uyarı olduğu için çalışmadığı anlamına gelmez. Uyarı, kullanılabilirliği koruduğunu, ancak kullanılabilirliği korumak için sadece bir sürüm kontrolü olarak kullandığınızı söylüyor. – user102008

cevap

0

Size uygulama boyunca kullanabilirsiniz kendi özel makrolar tanımlayabilirsiniz. Örnek: -

#define isIOS11() ([[UIDevice currentDevice].systemVersion doubleValue]>= 11.0 && [[UIDevice currentDevice].systemVersion doubleValue] < 12.0) 

veya

#define SinceIOS9_2 ([[UIDevice currentDevice].systemVersion doubleValue]>= 4.2 && [[UIDevice currentDevice].systemVersion doubleValue] < 9.2) 

aşağıda gibi kullanın: -

if (isIOS11()) { 
    // Do something for iOS 11 
} else { 
    // Do something iOS Versions below 11.0 
} 

bu sizin için çalışan varsa bana bildirin.

+0

Bu temiz. Sanırım bir gün onu deneyeceğim. Teşekkürler! – Akaino

+0

Bu, Xcode 9'daki yeni "Korumasız Kullanılabilirlik" uyarılarını bastırmayacaktır. – StatusReport