Deklarieren der Konformität zum @ objc-Protokoll in leeren Erweiterungsumbrüchen mit EXC_BAD_INSTRUCTION

Hatten viele, viele Probleme mit Swift-Protokollen in Kombination mit Arrays, aber ich konnte nicht einmal mein gesamtes Problem reproduzieren, bevor die Dinge auf dem Spielplatz zu brechen begannen. Hier ist ein minimales Beispiel.

ch habe zwei Protokolle und eine KlasBus, das die Konformität mit einem der Protokolle erklärt. Außerdem eine leere Erweiterung vonBus erklärt die Konformität mit dem anderen Protokoll:

import Foundation

@objc
protocol Displayable { var name: String {get} }

@objc
protocol Utterable { var utterance: String {get} }

class Bus : Displayable { var name = "a bus"; var utterance = "this is a bus"}

extension Bus : Utterable {}

var bus1 = Bus() // this line fails with EXC_BAD_INSTRUCTION

Die Konsolenausgabe sieht möglicherweise zufällig aus, ist es aber nicht. Ich erhalte es konsistent, wenn ich versuche, eine Instanz von @ zu erstelleBus:

objc[9658]: Method cache corrupted. This may be a message to an invalid object, or a memory error somewhere else.
objc[9658]: unused 0x0, SEL 0x10e4ce130, isa 0x1181f9ad0, cache 0x1181f9ae0, buckets 0x7fc491501060, mask 0x0, occupied 0x0
objc[9658]: unused 0 bytes, buckets 64 bytes
objc[9658]: selector 'resolveInstanceMethod:'
objc[9658]: isa '__lldb_expr_1314.Bus'
objc[9658]: Method cache corrupted.
Der Fehler verschwindet, wenn wir alle @ auskommentiere@objc attributesDer Fehler verschwindet, wenn wir uns nicht an @ haltUtterable: extension Bus: Utterable{}

Der Grund, warum meine ProtokolleMus hat das Attribut@objc liegt daran, dass sich die Obj-c-Laufzeit sonst beschwert, wenn Sie versuchen, Dinge wie @ zu tuvar myDisplayables: [Displayable] = [ Bus() ] oder auf andere Weise dynamisch auf Übereinstimmung mit einem Protokoll prüfen

Again, bitte beachte, dass dies ein minimales Beispiel ist.

Update mit Swift 1.2: Scheint, als ob es jetzt behoben ist. Xcode schlägt diese Änderungen vor, "weil das Protokoll dies erfordert":

class Bus : Displayable { @objc var name = "a bus"; @objc var utterance = "this is a bus"}