Iこのようなものがあります:私のsize
辞書の定義でメタタイプ(.Type)を辞書のキーとして使用できますか?
class Lumber { }
class Fruit { }
enum Size {
case Small
case Medium
case Large
}
let lumberSize = [
Size.Small: "2x4",
Size.Medium: "4x6",
Size.Large: "6x10"
]
let fruitSize = [
Size.Small: "grape",
Size.Medium: "apple",
Size.Large: "watermelon"
]
let size:[AnyObject.Type:Dictionary] = [
Lumber.Type: lumberSize,
Fruit.Type: fruitSize
]
を、私はXcodeのエディタからこのリアルタイムのエラーを取得:
タイプは 'AnyObject.Type' プロトコルに準拠していません " Hashable '
あなたはこれが解決すると思うかもしれません。 Xを辞書のキーとして使いたいが、ハッシュ可能でない場合は、単に使用できません。それは理にかなっている。
ただし、2つの理由でエラーメッセージが表示されません。
まず、現時点では、リアルタイムのXcodeエディターのエラーメッセージは、基本を超えてひどいです。 1日に数回、間違っていることを推測して無視し、それが受け入れられるまで構文を聞かなければなりません。
第2に、私はエラーメッセージを反論する文書の単語を読んでいると思います。 Swift 2.2 Language Referenceでは、タイプの下で、それは読む:
はクラス、構造体、または列挙型のメタタイプが.TYPE
続くそのタイプの名前であり、Swift Standard Library ReferenceにObjectIdentifier構造参照は、
となります。Swiftでは、クラスインスタンスとメタタイプだけが一意のIDを持ちます。
このセクションでは、それに準拠するプロトコルとしてHashable
も記載しています。
私がこの権利を読んでいるなら、すべてのタイプは、Hashableによって使用されるObjectIdentifier
を持っています。私は、Comparableを例として(間違って)使っていました。 ObjectIdentifierがComparableに準拠しているため、型を比較できますか? ObjectIdentifierはHashableにも準拠しているので、辞書でそれを使用できるはずです。
今私は、私がやろうとしていることは実際には可能だと思っていますが、私は正しい構文を得ることができません。
私は、Swiftをより深く理解するためにのみ文字列変換を避けることを望んでいました。 +1の教育的側面。私が次の週末までに何をしているのか分からないなら、私はこの(または別の)答えを受け入れるでしょう。ありがとう。 – Jeff