2016-03-21 4 views
0

これには単純な答えがあると確信していますが、ここで私の頭を叩いています。Core Foundation/Swift 2:CFByteOrderGetCurrent()の結果

私のSwift 2コード(Xcode 7.2.1)では、ローカルマシンのバイトオーダーを取得するのにCFByteOrderGetCurrent()を使用しています。

私は関数の結果を評価する方法を見つけ出すことはできません - 「が」以下で文が

でコンパイルに失敗した「という表現のタイプは、より多くの文脈のないあいまいです」:

私は 列挙する関数の結果を期待しましたが、私は運動場でそれをしようとすると、私 であるように思わCF documentationから
import Foundation 
let byteOrder = CFByteOrderGetCurrent() 
if byteOrder == .CFByteOrderLittleEndian { // compilation fails here 
    /* do something */ 
} 

nt ...

答えて

2

CFByteOrderは、typealiasであり、CFIndexである。

これは以下の値から構成され、enumある:

CFByteOrderUnknown, 
CFByteOrderLittleEndian, 
CFByteOrderBigEndian 

したがって、CFByteOrderLittleEndian1に相当します。

比較を行うために、一つは次の操作を行う必要があるかもしれません。

if byteOrder == CFByteOrder(1) 
{ 
    print(byteOrder) 
} 

1はここCFByteOrderLittleEndianに対応しています。私は少し異なったトリックを使用しています

+0

OKおかげで - 私は象徴的に使用できる方法はあり定数?それははるかに読みやすいでしょう! –

+0

私はシンボリック定数との比較を行う方法を工夫しました。以下を参照してください。 –

2

...

if 1.littleEndian == 1 { 
    print("little endian") 
} else { 
    print("big endian") 
} 

一般

let isLittleEndian = 1.littleEndian == 1 

、リトルエンディアンのシステム上の真のビッグエンディアンシステム上ではfalseです。利点は、すべてのプラットフォームで動作することです

+0

私はこのアプローチが一般的であるため、読者には何をしているのかは明らかです。 –

0

OKシンボリック定数を使用して比較を行う方法をつぶやきました。

あなたはUInt32CFByteOrderGetCurrent()の結果を変換する場合は、あなたが列挙の定数の生の値と比較することができます:

import Foundation 

let hostByteOrder = UInt32(CFByteOrderGetCurrent()) 

if hostByteOrder == CFByteOrderLittleEndian.rawValue { 
    print("little") 
} 
+0

別のフォーラムの誰かが、列挙の生の値から** CFByteOrder **値を作成する別の方法を指摘しました。これを直接比較することができます:if CFByteOrderGetCurrent()== CFByteOrder(CFByteOrderLittleEndian.rawValue ){...} ' –

+0

同じポスターは、Swiftは現在リトルエンディアンプラットフォームしかサポートしていないので、これは主に学問的な質問です!それにもかかわらず、それは教訓的な運動でした –

関連する問題