私はSwift 2から自分のコードを移行しようとしているので、私は(Xcode 8、Swift 3)を理解できません。タプルとは関係がありますが、私は完全にはわかりません。Swift 3:ネストされた汎用タイプ
私はいくつかのジェネリックスを定義するジェネリッククラスを持っています。これらのジェネリック医薬品では、私もカップル型の別名のセットアップおよびそれらを使用する関数持っている:割り当て(let pendingRequest: Request = ...
)で
open class GuardPool <Key: Hashable, Resource> {
public typealias ResourceCallback = ([Resource]) -> Void
public typealias Request = (keys: Set<Key>, cb: ResourceCallback)
fileprivate var pendingRequests: [Request] = []
open func request(_ keys: Set<Key>, cb: ([Resource]) -> Void) {
let pendingRequest: Request = (keys: keys, cb: cb)
pendingRequests.append(pendingRequest)
}
}
を、私はこのエラーを取得する:
Cannot convert value of type 'Set<Key>' to specified type 'Set<_>'
私は理解できませんこれを修正する方法を説明します。コンパイラがSet
の型情報を認識できないようです。
注:明らかに、クラスはこれよりもはるかに大きいです。 300行を挿入するのではなく、関連するコードをコピーして貼り付けました。
これは非常に誤解を招くエラーメッセージでした。私はちょうどそれを考え出し、自分の質問に答えるつもりでしたが、あなたは私にそれを打つ!ありがとう! –
40kを超えるコード行が処理されるため、移行担当者はクロージャーに「@エスケープ」マークを付ける必要がある場所を逃しました。明示的な割り当ては、私がこの 'pendingRequests.append((keys:keys、cb:cb))でエラーを出したために行われました。私は、明示的に型付けされた課題を追加することで問題を解決したいと考えていましたが、同じエラーが発生し続けました。面白いことに、この同じエラーは、ネストされた型とクロージャがタプルで結合されたコードのいくつかの場所で発生しています。 –