Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Swift 5中的Xcode游乐场中创建代理设计模式?_Ios_Swift_Xcode_Protocols_Swift Playground - Fatal编程技术网

Ios 如何在Swift 5中的Xcode游乐场中创建代理设计模式?

Ios 如何在Swift 5中的Xcode游乐场中创建代理设计模式?,ios,swift,xcode,protocols,swift-playground,Ios,Swift,Xcode,Protocols,Swift Playground,我在使用快速游乐场时遇到了某种问题,试图设置一个简单的委托设计 问题似乎是这样一个事实,协议不能标记为公共的,但游乐场中的源文件夹被视为一个新模块。所以我找不到解决这个问题的办法 这是我迄今为止的代码(在源文件夹中,VIEWCONTROLLER位于游乐场文件中) //标记:-导入 导入UIKit //马克:协议 协议UIManagerDelegate{ func didChangePage(转发:Bool) } //标记:-属性和初始值设定项 公共类UIManager{ //性质 私有let p

我在使用快速游乐场时遇到了某种问题,试图设置一个简单的委托设计

问题似乎是这样一个事实,协议不能标记为公共的,但游乐场中的源文件夹被视为一个新模块。所以我找不到解决这个问题的办法

这是我迄今为止的代码(在源文件夹中,VIEWCONTROLLER位于游乐场文件中)

//标记:-导入
导入UIKit
//马克:协议
协议UIManagerDelegate{
func didChangePage(转发:Bool)
}
//标记:-属性和初始值设定项
公共类UIManager{
//性质
私有let parentView:UIView
私有变量委托:UIManagerDelegate
//初始化器
public init(用于视图:UIView,委托:UIManagerDelegate){
self.parentView=view
self.delegate=委托
}
}
我收到的错误消息如下:无法将初始值设定项声明为公共,因为其参数使用内部类型。在尝试将协议标记为公共时,这也会产生错误

你们知道怎么解决这个问题吗?
非常感谢您事先提供的帮助。

将代表公开

public protocol UIManagerDelegate

谢谢,现在可以了,但是当我以前尝试这个方法时,我收到一条错误消息,告诉我不能将协议标记为公共协议。你知道为什么会出现这个错误消息吗?可能是你把函数公开了,而不是在类中。也许,非常感谢你的帮助。现在它开始工作了;)与您最初的问题无关,但我们通常将协议定义为
协议(例如
协议UIManagerDelegate:class{…}
),并将
委托
属性设为
引用(例如
私有弱var委托:UIManagerDelegate?
)。对委托对象的强引用是一个非常容易引入强引用循环的方法。我还建议不要使用
UI
前缀,因为这是用于UIKit符号的,将来使用它可能会引起混淆。