Ery*_*jur 4 uiscrollviewdelegate ios swift swift-extensions swift-protocols
我正在尝试创建一个由某些类实现的协议,所有这些都应该实现UIScrollViewDelegate.我想到的是我的新协议实现协议UIScrollViewDelegate.
protocol MyProtocol: UIScrollViewDelegate {
var myVar: NSString { get }
func myMethod()
}
Run Code Online (Sandbox Code Playgroud)
由于协议应具有其默认实现,因此我还为此协议创建了扩展.
extension MyProtocol {
func myMethod() {
print("I'm printing")
}
func scrollViewDidScroll(scrollView: UIScrollView) {
print("I'm scrollin")
}
}
Run Code Online (Sandbox Code Playgroud)
它编译,但不起作用.我做错了什么以及创建扩展协议的默认实现的正确方法是什么?
你想要做的是以下内容:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,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"
}
}
Run Code Online (Sandbox Code Playgroud)
注意另一个类是NSObject的子类,这是因为如果你不这样做,你将得到错误
anotherClass不符合协议NSObjectProtocol
这个错误是因为UIScrollViewDelegate它本身被定义为扩展NSObjectProtocol,这是由NSObject实现的Objective-C协议.
因此,让您的类继承自NSObject以符合NSObjectProtocol.Vanilla Swift课程没有.
| 归档时间: |
|
| 查看次数: |
3544 次 |
| 最近记录: |