Почему я не могу вставить кортеж (String, [ProtocolConformer]) в мой [( String, [ProtocolType])] таким образом?

Я сконцентрировал свой проблемный сценарий на детской площадке:

@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

1 ответ

Решение

Это просто компилятор запутался - попробуйте это:

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

По какой-то причине, а в некоторых случаях, он не может обнаружить кортеж при передаче в функцию / метод. И, как это часто бывает, сообщение об ошибке мало помогает.

Другие вопросы по тегам