Ios 可重用的Swift扩展和选择器
是否存在任何解决方案,使可重用的协议扩展为更多的类与选择器将指向自己? 例如,我尝试创建扩展名Ios 可重用的Swift扩展和选择器,ios,swift,macos,selector,Ios,Swift,Macos,Selector,是否存在任何解决方案,使可重用的协议扩展为更多的类与选择器将指向自己? 例如,我尝试创建扩展名TimerHelper,它添加了适当的函数来处理NSTimer。我发现: 但解决方案似乎有点曲折 我试图在代码中制作的东西,当然不起作用,是这样的: protocol TimerHelper { var timer:NSTimer { get set } } extension TimerHelper { func startTimer() { timer = N
TimerHelper
,它添加了适当的函数来处理NSTimer
。我发现:
但解决方案似乎有点曲折
我试图在代码中制作的东西,当然不起作用,是这样的:
protocol TimerHelper {
var timer:NSTimer { get set }
}
extension TimerHelper {
func startTimer() {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: self.updateTimer(), userInfo: nil, repeats: true)
}
func updateTimer() {
print("Timer updated.")
}
}
class ViewController: UIViewController, TimerHelper {
var timer: NSTimer = NSTimer()
func start() {
startTimer()
}
}
谢谢千万不要:
... = NSTimer()
而是将变量创建为可选变量。您希望使计时器无效并销毁,并且您永远不希望计时器未正确配置或无效
您的扩展不合适,因为它处理协议本身未涵盖的方面。您应该有两个协议,其中第二个协议扩展了第一个协议,称为类似于timeraction
。它定义了函数,扩展实现了这些函数
这不会改变在VC中使用计时器所需的操作,但会使您的类型系统干净、有效、可重用和可扩展
对于您需要查看的自引用部分,#selector
,我以前没有在协议中尝试过,应该很有趣
向start函数提供选择器或调用可能更明智,因为当协议如此通用时,实现选择器的协议扩展没有什么意义。但是,我想您可能想添加其他具有扩展的子协议,这些扩展提供了其他实现,这样您就可以混合功能,这是一个有趣的想法……不起作用意味着什么?是否存在具体错误?很抱歉,错误的字面意思是:
参数类型“Self”与预期类型“Anyobject”不一致。
但在我看来,当前的错误并不重要-根据我找到的帖子或其他示例等,我尝试的更多情况下会出现大量错误。此代码仅用于说明我的主意。谢谢你的回复。是的,我知道需要适当地启动NSTimer并使其无效,等等。我发布的代码应该只说明我对关系的基本想法。无论如何,对我来说,关键问题是选择部分。我不确定我对你的最后一段是否理解得很好。我现在寻找的基本上是扩展,我可以在其他类中使用最少的代码量=这实际上意味着我要继承的原则,但Swift是面向协议的。例如:两个UIViewController对计时器使用相同的机制,例如相同的警报或类似的东西…因此,也许您不需要计时器本身,您需要包含计时器和其他逻辑的命令对象…是的,也可以这样说,但我只是想,不是为每次使用计时器或帮助器或其他任何东西创建新实例,通过通用协议扩展共享相同的功能来模拟继承可能更有用……那么这是错误的想法吗?