45130


配列を用いてタスク管理を行おうと思いました。

[code]

    var foo:Array = [String]()
    //要素を最後尾に追加
    func add(value:String){
        foo.append(value)
    }
    // valueを配列内から検索し、削除
    func remove(value:String){
        foo.remove(at: foo.indexOf(value))
    }
    
    add(value:"bar")
    remove(value:"bar")
    
[/code]

そこでタスクを入れておく空の配列を用意し、そちらに要素を追加、  
そして削除までの流れを行いたいのですが、

[code]

    error: TestArea.playground:2:20: error: value of type 'Array<String>' has no member 'indexOf'
        foo.remove(at: foo.indexOf(value))
                       ^~~ ~~~~~~~
    
[/code]

このようなエラーが出てしまい、追加の段階まで処理が進みません。  
デフォルトで何らかの値を入れておけば問題なく動くのですが、それでは意味がないので、何かしらの策はないでしょうか？


CC BY-SA 4.0
2018-06-28T11:21:34.723
45128
2018-06-29T15:24:50.543
2018-06-29T15:24:50.543
19110
16877
question
swift swift4 array
Swift4 空配列の特性について

[code]

    ... has no member 'indexOf'
    
[/code]

^ 上記のメッセージは配列の要素がないという意味ではありません。  
「`indexOf`というメソッド」が`Array<String>`に見つからないという意味です。

`indexOf(:_)`というメソッドは古いSwift 2のときの書き方で、現在、同等のメソッドは`index(of:)`になります。

よってこの意図した挙動のコードは例えば下記のようになります。

[code]

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


CC BY-SA 4.0
2018-06-28T12:36:51.333
45130
2018-06-28T12:36:51.333
5519
45128
answer