gpt4 book ai didi

ios - 协议(protocol)实现协议(protocol)的默认实现

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:51 24 4
gpt4 key购买 nike

我正在尝试创建一个将由某些类实现的协议(protocol),所有这些类也应该实现 UIScrollViewDelegate。我想到的是让我的新协议(protocol)实现协议(protocol)UIScrollViewDelegate

protocol MyProtocol: UIScrollViewDelegate {
var myVar: NSString { get }
func myMethod()
}

由于该协议(protocol)应该有其默认实现,我还为此协议(protocol)创建了一个扩展。

extension MyProtocol {
func myMethod() {
print("I'm printing")
}

func scrollViewDidScroll(scrollView: UIScrollView) {
print("I'm scrollin")
}
}

它编译,但不工作。我做错了什么?创建扩展协议(protocol)的默认实现的正确方法是什么?

最佳答案

你要做的是:

protocol MyProtocol{
var myVar: NSString { get }
func myMethod()
}

protocol MyProtocol2{
var myVar2: NSString { get }
func myMethod2()
}

extension MyProtocol where Self: MyProtocol2 {
func myMethod() {
print("I'm printing ")
}
}

class anotherClass: MyProtocol, MyProtocol2 {
var myVar: NSString {
return "Yo"
}

var myVar2: NSString {
return "Yo2"
}

func myMethod2() {
print("I'm printing in myMethod2")
}
}

上面代码中MyProtocol2相当于你的UIScrollViewDelegate,

因此你要做的是:

protocol MyProtocol{
var myVar: NSString { get }
func myMethod()
}

extension MyProtocol where Self: UIScrollViewDelegate {
func myMethod() {
print("I'm printing")
}
}

class anotherClass: NSObject, MyProtocol, UIScrollViewDelegate {
var myVar: NSString {
return "Yo"
}
}

注意另一个类是 NSObject 的子类,这是因为如果你不这样做,你会得到错误

anotherClass does not conform to protocol NSObjectProtocol

此错误是因为 UIScrollViewDelegate 本身被定义为扩展 NSObjectProtocol,它是由 NSObject 实现的 Objective-C 协议(protocol)。

所以让你的类继承自 NSObject 以符合 NSObjectProtocol。 Vanilla Swift 类没有。

关于ios - 协议(protocol)实现协议(protocol)的默认实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35292065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com