2016-04-14 10 views
1

私は2つの異なるコンピュータからアプリを開発中です。 1つは私の家庭用マシンです。これは古いMacBook Proですが、最新のOSを備え、Xcode 7.3を実行しています。私が使用している2台目のマシンは、新品で雷が速い私の作業機械ですが、ヨセミテとXcode 7.2.1に限定されています。異なるバージョンのXcodeの条件を書き込む方法

最近Xcode 7.2.1を実行しているマシンでビルドエラーが発生しましたが、新しいXcodeを実行しているマシンでエラーなしでアプリケーションがビルドされ、実行されます。私は激しいIT政策のために作業機械をアップグレードすることはできません。私は本当に(本当に)自宅のマシンをXcode 7.2.1にダウングレードしたくありません。

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 

このことが可能です:

は、だから私がやりたいものを次の擬似コードとの条件と類似で書くのですか?私はAppleのドキュメントで次のことを見つけましたが、Xcodeのバージョンのオプションはありません。唯一のSWIFT()、OS()またはアーチ():事前に

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

ありがとう!

+0

このヘルプお月 - HTTPS ://stackoverflow.com/questions/30790188/how-do-i-see-which-version-of-swift-im-using/46080904#46080904 – Krunal

答えて

1

Xcode 7.3にはSwift 2.2が付属しており、Xcode 7.2.1にはSwift 2.1.xが付属しているため、swift()を使用してswiftのバージョンを確認してください。あなたのコードの場合

swift()が迅速2.2で導入されているので、あなたは以下のようなものです両方のバージョン、(ReadingTVCselfであると仮定)で動作し、使用コードを変更する必要があります。たとえば

// 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

私はこの解決策を試しました。 Xcode 7.2.1を実行している仕事用コンピュータで、次のエラーが表示されます。「予期せぬターゲット構成式(予想される「os」または「arch」)」 – zeeple

+1

ああ、申し訳ありません、Xcode 7.2.1(Swift 2.1.xを使用しています) 'swift()'をサポートしていないので、swift 2.2にのみ導入されています。私はこれに対する私の答えを更新しました。それが動作すれば教えてください。変更点については、Xcodeリリースコードをご覧ください:https://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html – Zhao

+0

Spot on。ありがとう! – zeeple

1

私はそれを現在テストすることはできませんが、私は7.3と7.2.1もswift(swift)を使うことができるように異なるSwiftバージョンを持っていると思います。それ以外は、Swift(#セレクタの構文?)の変更に起因するエラーであると仮定します。このチェックは、とにかくうまくいくでしょう。

PS:#selector(...)ではなく、古いバージョンではセレクタとして「pullToRefreshTableView」が必要です。

+0

Xcodeのバージョンにバンドルされているswiftのバージョンを確認する方法を教えてくださいあなたは走っています?私がXcodeについて知っていることや好みには何も見つかりません。 – zeeple

+1

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

1

少し先端迷惑な文字列の履歴の...

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

のXcode 8.0で動作し、高い(Xcodeの9ベータ版でも試験)

関連する問題