2015-09-04 12 views
6

に適用することができない私は、サードパーティ製のフレームワークを使用しています、ファイルが存在し、次のコードが含まれます。私自身のプロジェクトのクラスでは、私が持っている、そして、バイナリ演算子「==」は2つの構造体オペランド

struct AdServiceType { 
    init(_ value: UInt) 
    var value: UInt 
} 
var Internal: AdServiceType { get } 
var Normal: AdServiceType { get } 
var External: AdServiceType { get } 

class AdService : NSObject { 
    var serviceType: AdServiceType 
    init!() 
} 

var aService : AdService? 

//aService is initialised 

//COMPILER ERROR: Binary operator ’==’ cannot be applied to two AdServiceType operands 
if aService!.serviceType == Normal { 
    //DO SOMETHING    
} 

serviceTypeNormalであれば、私がチェックしたとき、私は上記のコンパイラエラーを得ました。どうして?どのようにそれを取り除く?

+0

。さて、あなたは 'serviceType.value'を比較するか、' Equatable'プロトコルに従うことができ、 'AdServiceType'に' == 'を使うためのカスタム比較ロジックを提供することができます。 – Alladinian

+1

@ iosDev82これについて疑念を抱いていましたが、結局のところ、私はそれをマークしました。 Thanx – Alladinian

答えて

0

Iは、最も簡単な解決策は、structのプロパティの値を比較することであることを考え出した:

if aService!.serviceType.value == Normal.value { 
    //DO SOMETHING. 
} 
0

は私が迅速知らないが、私の知る限り あなたの構造体を理解することができるように私はuは例を与えることにように、その操作を行うために、構造体の内部変数を取得する必要があると思う> 型AdServiceでは対象となるサービスタイプがあります

myStruct{ 
int x 
int y 
} 

今の状態では、このような

myStruct obj1; 
obj1.x = 50; 
obj2.y = 40; 

if(obj.x == obj.y) 何かのために有効になります。構造体自体の値ではなく、構造体内の値にアクセスする必要があります。か、かなり私はあなたのサードパーティのフレームワークについて多くの知識を持っていないvalues of struct == values of some other struct

-2

を表すことになり (struct.x == struct2.x && struct.y == struct2.y)ため&&オペレータを割り当てます。しかし、私は、いくつかの型は '=='ではなく.equalsを使用していることを知っています。例:

if aService!.serviceType.equals(Normal) 

多分それが必要です。

6

AdServiceTypeEquatable構造体がないとスイッチ式として使用することができません。しかし、そのvalueすることができます。

switch aService!.serviceType.value { 
case Internal.value: 
    //do something 
case Normal.value: 
    //do something 
case External.value: 
    //do something 
default: 
    ... 
} 

また、あなたがEquatableプロトコルにAdServiceType追加サポートを拡張することができます:

extension AdServiceType : Equatable {} 
public func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool 
{ 
    return lhs.value == rhs.value 
} 

を、そのままスイッチを残してみてください。

+0

値を使用してエラーが発生しました: 'AdServiceType'と 'UInt'には二項演算子 '〜='を適用できません – user842225

+0

どこからでも値を使用しましたか?スイッチラインとすべてのケースラインで? –

+1

ああ、私はスイッチラインでのみ使用しました。ありがとう!今は大丈夫です! – user842225

-2

クラスとnsobjectに変更して、痛みを乗り越えてください。

class MyClass: NSObject { 

    //Write code in here 
} 
+0

swiftの強みの1つは、構造体を持つ値型です。「Swiftで値型を持つ優れたアプリケーションを構築する」(https://developer.apple.com/videos/play/wwdc2015-414/)をチェックしてください。 – marchinram

+0

==簡単に使えるようにならないなら、あまり意味はありません。あなたはまた、他のすべてのNSObjectユーティリティ関数も欠場します。 – Esqarrouth

+0

Swiftを使うつもりなら、可能なときには慣用コードを書けるかもしれません。 – Jadar

0

私はEquatable構造体を作ることによってそれを修正します: `代わりにenum`として実装する必要があり

extension AdServiceType: Equatable {} 

func ==(lhs: AdServiceType, rhs: AdServiceType) -> Bool { 
    return lhs.value == rhs.value; 
} 
関連する問題