2016-10-15 11 views
15

BOOLするのIntの変換:私は何ができると信じていスウィフト2.xで

let number = 1 
let result = Bool(number) 

print(result) // prints out: true 

をしかしスウィフト3ので、私はこれを行うことはできませんされてきたし、それは私にエラーを与える:

Cannot invoke initialiser for type 'Bool' with an argument list of type '(Int)'

現在、拡張子を使用してIntBoolに変換していますが、これを行うためのオプションが組み込まれていないのではないかと思っていました。

答えて

28

いいえ、ありとBoolからIntの変換のためのオプションで内蔵され、明示的ではありませんでした、を参照してください3210。

しかし、まだinitializer by NSNumberが存在します。違いは、スウィフト数値タイプとNSNumberの間の暗黙的なブリッジングが、スウィフト3で削除されていることです(これは以前はで初期化されたBoolの初期化を許可していました)。あなたはまだ明示的にIntからNSNumberへの変換を行うことで、NSNumber初期化することによって、これをアクセスすることができ:

let number = 1 
let result = Bool(number as NSNumber) 

print(result) // true 

@Hamishは以下の彼のコメントに書いている:私たちは初期化子の主題を残して、ちょうど最終結果に焦点を当てた場合(インスタンス化Boolインスタンスは、我々は単にInt値(署名func !=(lhs: Int, rhs: Int) -> Boolと特異的に、オペレーター)のため!=オペレータを利用することができる)Intインスタンスの値を与え、容易に達成!=オペレータアプローチ用いて一般化:

をあなた自身だけでなく、 @JAL describes in his answerのような多く

、あなた自身のBoolIntによって初期化子を構築することができますが、あなたにもInteger protocolに準拠した任意のタイプのためにこれを一般化検討するかもしれない:

extension Bool { 
    init<T: Integer>(_ num: T) { 
     self.init(num != 0) 
    } 
} 

/* example usage */ 
let num1: Int8 = -1 
let num2: Int = 3 
let num3: UInt64 = 0 
// .... 
let result1 = Bool(num1) // true 
let result2 = Bool(num2) // true 
let result3 = Bool(num3) // false 
+6

または、obj-cブリッジなしで、 'let result = number!= 0' :) – Hamish

6

Int、唯一NSNumberをとるブールイニシャライザはありません。以前は、Intは、暗黙のうちに財団を通じてNSNumberにブリッジされたが、それはスウィフトに削除された3

あなたのような何かを行うことができます:または、あなたがBoolを拡張し、かかるカスタムのinitを作成することができます

let result = Bool(number as NSNumber) 

をInt:

extension Bool {  
    init(_ number: Int) { 
     self.init(number as NSNumber) 
    } 
} 
+0

興味深いことに、これはXcode 8.0では動作しないようですが、8.2/8.3ではうまく動作します。 – BonanzaDriver

+0

@BonanzaDriverこれについて「何がうまくいかないのですか?それはコンパイルされませんか?正しいbool値を戻しませんか? – JAL

4

スウィフト3

この

extension Integer { 
    var boolValue: Bool { return self != 0 } 
} 
試してみてください

使用

let number = 2 
print(number.boolValue) 

let items = ["1"] 
print(items.count.boolValue) 
+0

について:' var boolValue:Bool {return self!= 0} ' – LoVo

+0

@LoVoありがとうございました – lingchen

2

私はXcodeの9.0.1とスウィフト3.0を使用しています。

let result = (number as NSNumber).boolValue 

これは私にとって非常にうまくいきます。

関連する問題