web-dev-qa-db-ja.com

三項条件演算子でオプション変数をどのように使用しますか?

三項条件演算子でオプション変数を使用したいのですが、次のエラーをスローしています:optionalをブール値として使用することはできません。

var str1: String?
var myBool:Bool
myBool = str1 ? true : false
55
Yashwanth Reddy

文字列値をboolに割り当てることはできませんが、str1がnilであるか、このようになっていないかを確認できます。

myBool = str1 != nil ? true : false
print(myBool)

Str1が空のため、falseが出力されます。

79
Dharmesh

Nil Coalescing Operatorも使用できます。以下のコードは、三項条件演算子と強制アンラップ(a!)を使用して、aがnilでない場合はaでラップされた値にアクセスし、そうでない場合はbを返します。

通常の三項演算子:

output = a != nil ? a! : bApple Developer Linkデモリンク を参照してください

Swift 1.2&2では、上記のコード行はより短い形式に置き換えられています。

output = a ?? b

デモリンク :nil合体演算子(a ?? b)は、値が含まれている場合はオプションのaをアンラップし、aがnilの場合はデフォルト値bを返します。

65
Abhijeet

これは、必要な値がオプション(Swift 3.0内)での関数呼び出しのプロパティまたは結果である場合でもうまく機能します。

return peripheral?.connected ?? false
5
Robert Atkins

三項演算子 3つのターゲットで動作します。 Cと同様に、Swiftには、三項演算子(a?b:c)のみがあります。

tableViewの使用例-

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return section == 2 ?  4 :  1
}

セクションが2に等しい場合は4を返し、そうでない場合は1を返します。

4
Jack

比較が何らかの条件に基づいている場合

 let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")

ここで、関数getLocationRadius()は文字列を返します。 1と?の間にスペースを入れない場合、もう1つあります。構文エラーが発生します

0
Muhammad Nayab