Ich versuche, einen Objective-C-Block in Swift 2, um es hinzuzufügen, um ein NSArray
wie so zu bauen:Konvertieren Swift 2 Verschluss in Objective-C-Block
typealias CompletionBlock =() -> Void
let aBlock:CompletionBlock = {
print("Hello world!")
}
let nsArray = NSMutableArray()
nsArray.addObject(aBlock) // Error
Ich weiß, es funktioniert einfach gut mit einem Swift-Array, aber ich brauche eine NSArray
hier für die Kompatibilität mit bestehenden Objective-C-Code. Und wenn ich ein schnelles Array verwende, weigert sich der Compiler, es auf NSArray
zu werfen, weil es kein [AnyObject]
(es wird ein [Any]
sein wird).
Das Problem hierbei ist, dass eine rasche Schließung ist kein Gegenstand im Gegensatz zu Objective-C-Blöcken, die Objekte hinter den Kulissen sind (sie Instanzen von NSBlock
sind, welche eine Unterklasse von NSObject
ist)
Also meine Frage ist: Wie erstellt man einen Objective-C Block in swift? Ich habe versucht, @convention (block)
in den Typalias zu verwenden, aber es funktioniert nicht.
Duplizieren von http://stackoverflow.com/questions/28211973/swift-closure-as-anyobject oder http://stackoverflow.com/questions/24586293/cast-closures-blocks? –
Danke! Ich habe diese zweite Antwort mit der richtigen Verwendung von 'unsafeBitCast' vermisst. Entschuldigung für das Duplikat ... – deadbeef