2

問題のシナリオを遊び場で要約しました。

@objc protocol Prot {}
class Cla : Prot {}

var myArray: [ (aString: String, prot: [Prot] ) ] = []
var myProts: [Prot]? = [Cla()]

// error: type 'T' does not conform to protocol 'IntegerLiteralConvertible'
myArray.append(aString: "myname", prot: myProts!)

// works
myArray.append(aString: "myname", prot: myProts! as [Prot])

// works
if let myProts: [Prot] = myProts {
    myArray.append(aString: "myname", prot: myProts)
}

ここで強制アンラップが受け入れられないのはなぜですか?

Xcode 6.1.1

4

1 に答える 1

0

コンパイラが混乱しているだけです-これを試してください:

let tuple = (aString: "myname", prot: myProts!)
myArray.append(tuple)

何らかの理由で、場合によっては、関数/メソッドに渡されたときにタプルを検出できません。そして、よくあることですが、エラー メッセージはあまり役に立ちません。

于 2015-01-23T20:38:16.750 に答える