2016-04-14 25 views
1

İki farklı bilgisayardan bir uygulama üzerinde çalışıyorum. Biri eski bir MacBook Pro olan, ancak en son işletim sistemine sahip olan ve Xcode 7.3'ü çalıştıran ana makinem. Kullandığım ikinci makine, yepyeni ve şimşek hızında çalışan iş makinem, ancak Yosemite ve Xcode 7.2.1 ile sınırlı.Xcode'un Farklı Sürümleri için Koşul Yazma

Geçenlerde Xcode 7.2.1 çalıştıran makinede bir yapı hatasıyla karşılaştım, ancak uygulama yeni Xcode'u çalıştıran makinede hata oluşturuyor ve hatasız çalışıyor. İşe yaramaz IT politikasından dolayı iş makinelerini yükseltemiyorum ve ev aletimi Xcode 7.2.1'e düşürmeyi gerçekten istemiyorum.

if Xcode.version == 7.3 
    // Run this version of the statement 
    refreshControl.addTarget(self, action: #selector(ReadingTVC.pullToRefreshTableView), forControlEvents: UIControlEvents.ValueChanged) 
if Xcode.version == 7.2.1 
    // Run this different version of the statement 
    // I still need to figure out how to rewrite the statement for 7.2.1 

bu mümkün mü:

Yapmam ne istiyorsunuz aşağıdaki pseudocode şartlı benzer yazmak mı? Apple belgelerinde aşağıdakileri buldum, ancak Xcode sürümleri için seçenek yok. Sadece hızlı(), os() veya kemer(): Önceden

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Statements.html#//apple_ref/doc/uid/TP40014097-CH33-ID539

teşekkürler!

+0

Mayıs bu yardım (Xcode 9 beta içinde de test) : //stackoverflow.com/questions/30790188/how-do-i-see-which-version-of-swift-im-using/46080904#46080904 – Krunal

cevap

1

Xcode 7.3, Swift 2.2 ve Xcode 7.2.1 ile birlikte gelir, çünkü Swift 2.1.x ile birlikte gelir sürümünü kontrol etmek için swift() kullanmalısınız. örneğin

// For both swift 2.1.x and swift 2.2. In swift 2.2, this will pop a 
// warning and ask you to fix. But you can wait until you work computer 
// updated Xcode version to 7.3. You will be force to change when 
// upgrade to swift 3.0 since the old string based api will be removed. 
// Currently it is just marked as deprecated. 
refreshControl.addTarget(self, action: "pullToRefreshTableView", forControlEvents: UIControlEvents.ValueChanged) 
+0

Bu çözümü denedim. Xcode 7.2.1 çalıştıran iş bilgisayarımda şu hatayı alıyorum: "Beklenmeyen hedef yapılandırma ifadesi (beklenen 'os' veya 'arch')" – zeeple

+1

ah, Xcode 7.2.1'i unuttuğum için üzgünüm (Swift 2.1.x'e sahip) swift() 'yi desteklemez, sadece 2.2'de tanıtılır. Cevabımı bunun için güncelledim. Çalışırsa lütfen bana bildirin. Xcode sürüm kodunu burada değişiklikler hakkında görebilirsiniz: https://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html – Zhao

+0

Spot on. Teşekkürler! – zeeple

1

Şu anda deneme yapamıyorum, ancak 7.3 ve 7.2.1 sürümlerinin de farklı Swift sürümleri olduğunu düşünüyorum, böylece swift() kullanabilirsiniz. Bunun dışında, hatanın Swift'deki (#selector sözdizimi?) Bir değişiklikten kaynaklandığını varsayarsak, bu kontrol yine de daha iyi olur.

PS: #selector (...) yerine eski sürümde "pullToRefreshTableView" öğesi seçici olarak görünüyor.

+0

Xcode sürümüyle hangi sürümün paketlendiğini nasıl anlayabilirsiniz? Koşuyorsun? Xcode veya tercihler bölümünde bulabileceğim hiçbir şey yok. – zeeple

+1

http://stackoverflow.com/a/30790542 – Darko

1

küçük ipucu: swift() beri kodu için

, hızlı 2.2'de tanıtıldı, şöyle altındadır iki sürümde çalışır kullanımlık kodu, değiştirmeniz gerekir ( ReadingTVC varsayarsak self olan) https - can sıkıcı dize tarihi için ... Xcode 8.0 ve üzeri

 #if swift(>=4.0) 
      let len = text.count 
     #else 
      let len = text.characters.count 
     #endif 

eserler

İlgili konular