私はあまりにもよく理解していないものを見つけたとき、私は、良いチュートリアルのコードを読んでいたのメンバーに、プロトコルに型指定された変数を使用して(:https://www.ralfebert.de/tutorials/ios-swift-multipeer-connectivity/ConnectedColors.zip完全なコードはここにある):は割り当てとクラス
protocol ColorServiceManagerDelegate {
func connectedDevicesChanged(_ manager : ColorServiceManager, connectedDevices: [String])
func colorChanged(_ manager : ColorServiceManager, colorString: String)
}
class ColorServiceManager : NSObject {
fileprivate let ColorServiceType = "example-color"
fileprivate let myPeerId = MCPeerID(displayName: UIDevice.current.name)
fileprivate let serviceAdvertiser : MCNearbyServiceAdvertiser
fileprivate let serviceBrowser : MCNearbyServiceBrowser
// THIS ONE!
var delegate : ColorServiceManagerDelegate?
override init() {
self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: myPeerId, discoveryInfo: nil, serviceType: ColorServiceType)
self.serviceBrowser = MCNearbyServiceBrowser(peer: myPeerId, serviceType: ColorServiceType)
super.init()
// AND THIS
self.serviceAdvertiser.delegate = self
self.serviceAdvertiser.startAdvertisingPeer()
// AND THIS
self.serviceBrowser.delegate = self
self.serviceBrowser.startBrowsingForPeers()
}
私は理解していないことである。
- 開発者は、このデリゲート変数を宣言する理由。
- これはオプションです。
- なぜプロトコルのタイプですか?
- なぜコンパイラはdelegateプロパティを持たないserviceAdvertiserとserviceBrowserについて不平を言っていません。
- このデリゲートを自分自身に割り当てることによって彼が達成すること。わずか数:-)
どれでも答えが高く評価されに名前を付ける
。
これはかなり広い質問です。あなたが見ているのは、Delegationパターンの3つのインスタンスです。 [開始するにはここをクリックしてください](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID276) 。質問4については、これは3つの異なる「デリゲート」プロパティです。 ['MCNearbyServiceAdvertiser'](https://developer.apple.com/reference/multipeerconnectivity/mcnearbyserviceadvertiser)クラスを見ると、独自の' delegate'プロパティがあることがわかります – Arthur
これを指摘してくれてありがとう私は3つのエラーを受けたと私は彼らがクラスに他の割り当てが表示されないため(または、良い、ちょうど別の3つのエラーを作る) –
Ok、@Arthur、今度は私がそれをよく理解しています:エラーは別のファイル(別のファイルで、ビューコントロールで代理人を代入する場所)と内線番号 –