Import Extension-Datei im Swift
Erstelle ich eine Erweiterung für UIView in Swift. Weiß jemand, wie man importieren, die Datei auf meinem UIViewController?
Ich möchten, importieren Sie die extension-Datei in den controller-Datei, so kann ich die Wiederverwendung der extension-Datei. Zum Beispiel eine Struktur wie diese:
UIViewExtension.swift
import UIKit
extension UIView {
var myVar : Float {
get {
return myVar
}
set (newMyVar) {
myVar = newMyVar
}
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view, typically from a nib.
var squareView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
squareView.myVar = 50
self.view.addSubview(squareView)
println("Offset: \(squareView.myVar)")
}
}
Dies ist der Fehler gegeben durch den compiler:
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
Das sieht wie ein bug im compiler. Es funktioniert nicht für mich entweder, es sei denn, ich bringe die extension in "ViewController.swift" vor die definition der Klasse.
Das ist richtig, ich habe die Erweiterung in der gleichen Datei wie
Sie könnten versuchen, fügen Sie eine Deklaration der Klasse in der Datei mit der extension? E. g.
Das ist richtig, ich habe die Erweiterung in der gleichen Datei wie
ViewController.swift
vor der Buchung, damit es funktioniert. Auch autosuggestion fürimport
funktioniert nicht, auch für UIKitSie könnten versuchen, fügen Sie eine Deklaration der Klasse in der Datei mit der extension? E. g.
class TestClass {}
. Vielleicht hilft es ja dem compiler zu finden, der Erweiterung...InformationsquelleAutor javienegas | 2014-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Dinge, die hier Los ist.
Können Sie nur hinzufügen von berechneten Eigenschaften auf eine Verlängerung. Dies bedeutet, dass Sie eigentlich gar nicht haben myVar zuweisen oder Lesen. Also, wenn Sie Zugang
myVar
Sie tatsächlich recursing unendlich. Das ist eigentlich das, was die Warnung ist in Anspielung auf (wenn auch in unklarer Weise):Soweit ich weiß, gibt es keine Möglichkeit zum hinzufügen von nicht-berechneten Eigenschaften um einen Typ mit einer Erweiterung. Dies gilt auch für Objective-C, wo der einzige Weg, um tatsächlich zu speichern, eine Eigenschaft Hinzugefügt, die die Klasse mit Hilfe einer Klasse-Erweiterung ist die Verwendung von Objective-C-Objekt Vereins über
objc_getAssociatedObject
undobjc_setAssociatedObject
ausobjc/runtime.h
.Schließlich ist es definitiv ein bug im compiler, wenn Sie Ihre Erweiterung berechnete Eigenschaft ein setter. Das minimal-Beispiel zum reproduzieren des Fehlers, die keine Rekursion (durch den Wegfall der Zugriff auf myVar) und einfach ignorieren, der Wert ist:
Meine Frage ist es dann über die 3 und 4 Punkte. Wie das hinzufügen neuer Eigenschaften als objC zu einer Verlängerung ohne getter? Aber auch, dass der Fehler immer noch angezeigt wird, wenn die extension aufgerufen wird, aus der ViewController
Die einzige Möglichkeit, die ich kenne, um zu erreichen, was Sie versuchen zu tun, ist mit Objective-C, vgl. nshipster.com/associated-objects
Re 4. Sie sollten auf jeden Fall melden Sie den Fehler an Apple unter bugreport.apple.com
Ich habe es getan, mit objC, das ist, warum ich bin versucht zu tun, mit Swift 😉
InformationsquelleAutor Nicholas H.
Traf ich dieses Problem auch. Es scheint, dass es zu einem compiler-Fehler. Der compiler scheint zu Abstürzen, wenn Sie die berechneten Eigenschaften in eine standalone-Erweiterung Datei. Der workaround den ich gefunden habe, ist zum erstellen der Erweiterung in non-standalone-Datei. So auch in diesem Fall konnten Sie Ihr die Erweiterung in Ihre ViewController.swift-Datei. Etwa so:
Bitte melden Sie diese an Apple!
Radar: 17438876
Mit static vor der Deklaration einer Eigenschaft scheint den trick tun. Ich habe ein code-Beispiel, wie eine Antwort!
InformationsquelleAutor taylorjcase
Nach Auswahl der Datei in Xcode in das Projekt-navigator auf der linken Seite, stellen Sie sicher, überprüfen Sie die app und testen Sie im Ziel-Mitgliedschaft Abschnitt in der Inspector-Ansicht auf der rechten Seite.
Wenn es nicht aktiviert ist, dann wird es nicht in das Projekt aufgenommen werden und somit erhalten Sie die compile-Fehler.
InformationsquelleAutor Encore PTL
Mit statische vor der Deklaration einer Eigenschaft scheint den trick tun.
Hoffe, es hilft!
InformationsquelleAutor Roger Fernandez Guri