私はMultipeerConnectivityを実装するクラスを持っていて、サブクラスがそれを広告主に実装したいと思っています。 MCAdvertiserAssistant(サービス種別:, discoveryInfo :,セッション:)は、両方の性質をのServiceTypeとセッションを使用しているため)(初期化段階 - これはより簡単に行うことができますか?
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()
}
}
をこれは、initのための位相ルールを破る:ここで私が欲しいものですスーパークラスの
私はサブクラスで次のようにしました。助手を遅延して宣言して不正行為をしました。これは動作します!どうして?イニシャライザは依然として自己を呼び出す必要があります。私のサブクラスを作成するには、この不自然なことをしなければなりませんでした。そして、私はおそらくフェイズが避けようとしていたものを転覆しました!
class AdvertiserConnectionManager: ConnectionManager {
lazy var assistant: MCAdvertiserAssistant = {
MCAdvertiserAssistant(serviceType: serviceType, discoveryInfo: nil, session: session)
}()
override init() {
super.init()
assistant.delegate = self
assistant.start()
}
}