2016-11-10 1 views
3

Ich habe gerade ein iOS-Projekt geerbt, das Apple's ResearchKit (RK) enthält.Upgrade auf Swfit 3: kann 'init', das als nicht verfügbar markiert wurde, nicht überschreiben

Ich habe auf die neueste Version von RK und auch auf Swift 3 aktualisiert. Während ich in iOS und RK gearbeitet habe, bin ich immer noch nicht sehr zuversichtlich. Wie auch immer, es gibt eine Klasse namens SurveyTask, die eine ORKOrderedTask von RK implementiert.

enter image description here

cannot override 'init' which has been marked unavailable

diese Funktion am Ende, stepz bereits definiert, die wir haben:

super.init(identifier: "survey", steps: stepz) 

ich die ORKOrderedTask Klassendefinition geprüft, die eine init Funktion hat.

enter image description here

Ich habe über initializers gelesen hatte, aber habe nichts gefunden. Die Verwendung von override oder convenience vor der init in SurveyTask ändert nichts. Derselbe Fehler. Jede Hilfe würde sehr geschätzt werden.

XCode Version 8.1.

+0

Die init des 'ORKOrderedTask' scheint eine Kennung müssen also warum Versuchen Sie nicht, die normale 'init (Bezeichner: String, Schritte: [QRKStep]?) ' – LoVo

+0

Die Sache ist, ich glaube nicht, dass der Zweck der' init() 'ist, den anderen zu überschreiben. Es wird nur ausgeführt, wenn 'SurveyTask' instanziiert wird. Der Aufruf mit "super" liefert diese Argumente. –

+0

Versuchen Sie, mark init als 'open', nicht' public' zu markieren. –

Antwort

2

Hier ist, wie man einen parameter initializer nachahmen können und vermeiden Sie den unavailable Fehler:

class MyClass: ParentWithUnavailableInitializer { 
    init(workaround _: Void =()) { 
     // Call a designated initializer 
     super.init(param: "a very sensible value") 
    } 
} 

// At a call site 
let obj = MyClass() 

Werke in der Swift 3.2 und Swift 4.

Verwandte Themen