45171


先日、回答をいただいた質問でさらにわからないことが増えてしまったので、度々失礼いたします。

以下、Swift４で配列(foo[String])から任意の文字列(value)の要素を削除する関数を用意しました。

[code]

    func remove(value: String){
        if let index = foo.index(of: value) {
            foo.remove(at: index)
        }
    }
    
[/code]

この中にif文の中で定数が定義され、値が代入され、何をどう比較しているのかがわかりません。  
if文の中に比較演算子以外を見ることが初めてです。  
定数が定義され代入したことで、Bool値（？）が真になり、実行されるというのであれば、この書き方である必要というのはあるのでしょうか？  
ご回答よろしくお願いいたします。


CC BY-SA 4.0
2018-06-29T13:35:57.093
45170
2018-06-29T14:28:58.670
2018-06-29T13:41:15.887
19110
16877
question
swift swift4
if以下に来る代入演算子について


`if let 〜` という構文はドキュメントで [optional binding](https://docs.swift.org/swift-
book/LanguageGuide/TheBasics.html#ID333) と呼ばれているもので、Optional 型の値に対して、非 nil
な値になっているか nil になっているかで分岐するものです。通常の if 文と役割が似ているものの、別の構文だとお考えください。

具体的な構文は下のような感じです。

[code]

    if let 〈変数名〉 = 〈オプショナルな値〉 {
        〈値が入っていた場合の処理〉 // ここの処理中で let で定義した変数を使えます
    } else {
        〈nil の場合の処理〉
    }
    
[/code]

この構文は、オプショナルな値に対して「実際に値が入っていれば〇〇する、無ければ××する」という処理を書くときに用いることができます。この構文を使わなかった場合、nil
かどうかのチェックと、nil でない場合に Optional 型から値だけ引き剥がす処理 (つまり、unwrap する処理) を書かないといけません。`if
let` を使うことでこれらを短く書くことができます。

さて、今回問題となっているプログラムは次のものでした。

[code]

    func remove(value: String){
        if let index = foo.index(of: value) {
            foo.remove(at: index)
        }
    }
    
[/code]

この例だと、`foo.index(of: value)` の結果確かに `value` となるインデックスがあったときはそれが変数 `index`
に代入され `foo.remove(at: index)` が実行される、そのようなインデックスが無ければ何もしない、という実装がなされています。


CC BY-SA 4.0
2018-06-29T13:59:08.223
45171
2018-06-29T14:28:58.670
2018-06-29T14:28:58.670
19110
19110
45170
answer