Ich versuche Funktion zu implementieren, die einfacher Name Werttyp zurückgibt:Swift-Typ (von :) Funktion Unterschrift
func typeName(of value: Any) -> String {
return String(describing: type(of:value))
}
Aber wenn ich versuche es vor super.init
Anruf zu nennen:
class SuperTest {
init(name: String) {
print(name)
}
}
class Test: SuperTest {
init() {
// super.init(name: String(describing: type(of: self)))
super.init(name: typeName(of: self))
}
}
Test()
es irgendwie:
'selbst' verwendet, bevor super.init Aufruf
was mir völlig klar ist.
Aber wenn ich inline typeName(of:)
body code (kommentierte Zeile) dann kompiliert und druckt erwartet "Test" Ergebnis.
Warum passiert diese Magie und wie kann ich typeName(of:)
vor super.init()
wie type(of:)
verwenden?
Auch ich kann keine Informationen (Funktionssignatur) finden über type(of:)
in Swift docs oder source code.
Wenn Sie 'typeName' statisch machen (wie es logisch sinnvoll zu sein), werden Sie dieses Problem nicht bekommen. – Alexander
Es ist bereits im globalen Umfang definiert. Wie kann ich es statischer machen? – mixel
Oh, ich dachte, es wäre eine Instanzmethode. Warte, du kannst kein Global vor dem Superinitialisierer aufrufen? "Ja wirklich?" : o – Alexander