Ich habe eine Klasse implementiert MultipeerConnectivity und ich möchte eine Unterklasse für Werbetreibende implementieren. Hier ist, was Ich mag würde:Initialisierungsphasen - kann dies einfacher durchgeführt werden?
class ConnectionManager: NSObject {
let serviceType: String
let peerID: MCPeerID
let session: MCSession
var delegate: ViewController!
override init() {
serviceType = "mc-service"
peerID = MCPeerID(displayName: UIDevice.current.name)
session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
super.init()
session.delegate = self
}
}
class AdvertiserConnectionManager: ConnectionManager {
let assistant: MCAdvertiserAssistant
override init() {
assistant = MCAdvertiserAssistant(serviceType: serviceType, discoveryInfo: nil, session: session)
super.init()
assistant.delegate = self
assistant.start()
}
}
aber bricht die Phasing Regeln für init(), weil MCAdvertiserAssistant (service :, discoveryInfo :, Sitzung :) verwendet service und Sitzung, beide Eigenschaften der Oberklasse.
Ich habe das folgende mit der Unterklasse statt, Betrug, indem Sie Assistenten faulenzen. Das funktioniert! Warum? Der Initialisierer muss immer noch self aufrufen !!! Und ich musste diese unnatürliche Sache tun, um meine Unterklasse zu erstellen. Und ich habe wahrscheinlich unterlaufen was phasing sollte vermeiden !!
class AdvertiserConnectionManager: ConnectionManager {
lazy var assistant: MCAdvertiserAssistant = {
MCAdvertiserAssistant(serviceType: serviceType, discoveryInfo: nil, session: session)
}()
override init() {
super.init()
assistant.delegate = self
assistant.start()
}
}