我正在阅读一本好教程的代码,当我发现一些我不太了解的东西时(完整的代码在这里: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()
}
我不明白的是:
仅举几例: - )
感谢任何回答。
答案 0 :(得分:2)
如果你熟悉java编程语言,ios中的委托和协议就像java中的接口一样用于回调。因此,协议包含一些方法,这些方法需要由确认该协议的所有类实现,并且委托变量用于从上述协议中调用这些方法。
委托变量通常是选项,因为可能存在没有对象确认协议且委托变量可能为零的情况。
委托用于从协议中调用方法,因此必须是协议的类型
如果swift中的所有非可选方法在调用super.init()之前在init中初始化,则编译器没有问题
通过将委托分配给self,对象声明它实现了ColorServiceManagerDelegate。
希望这有帮助。