1

Swift 4 Playground では、このコード:

let time = 1234
let description: String? = nil

let keyed: [String : Any?] = [
    "time": time,
    "description": description
    ]

let filtered: [String : String] = keyed
    .filter{ _, value in value != nil }
    .mapValues { value in return String(describing: value!) }

print(keyed)
print(filtered)

次の出力が生成されます。

["description": nil, "time": Optional(1234)]
["time": "1234"]

これはまさに私が望むものです(元の値が ではないキーと値のペアのみnil、値がラップ解除されて文字列に変換されます)。ただし、Xcode 9 (ベータ 3) では、ビルドが で失敗し'filter' is unavailableます。これはベータ版¯\_(ツ)_/¯のようなものですか、それとも何か不足していますか?

4

3 に答える 3

0

今日も同じ問題がありました。

xCode 8.x を使用して Swift 3.x で作成された私のプロジェクト。xCode 9 へのアップグレード後、今日'filter is unavailable'エラーが発生するまで問題なく動作していました。

言語バージョンを明示的に Swift 4 に設定しても解決しませんでした。(プロジェクトのクリーニング、xCodeの再起動なども行いませんでした。)

私にとってうまくいったトリックは、プロジェクト全体を Swift 4 に変換することでした。

(編集/変換/現在のSwift構文への移行ツールから始めましたが、これはあまり役に立たなかった場合もありますが、それはまったく別の問題です。)

その後、エラーはなくなりました...

于 2018-01-07T19:18:05.223 に答える