gpt4 book ai didi

ios - 如何使不同的类遵循具有不同功能的相同协议(protocol)?

转载 作者:行者123 更新时间:2023-11-28 12:35:49 25 4
gpt4 key购买 nike

如果标题不清楚,我先道歉,但我想先知道一些代码片段是如何实现的:

一级:

@objc protocol FetchProtocol
{
var someVar: Bool
{
get set
}

var someUIView: FetchProtocol
{
get set
}

func someFuncOne()
}

class ClassOne: UIViewController, FetchProtocol
{
...

@IBOutlet var someUIView: FetchProtocol!

....

}

第二类:

@objc protocol FetchProtocol
{
var someVar: Bool
{
get set
}

var someTableView: FetchProtocol
{
get set
}

var someUIView: FetchProtocol
{
get set
}

func someFuncOne()
func someFuncTwo()
}

class ClassTwo: UIViewController, FetchProtocol
{
...

@IBOutlet var someTableView: FetchProtocol!
@IBOutlet var someUIView: FetchProtocol!

....

}

ClassOneClassTwo 都遵循相同的 FetchProtocol 并且两个类都使用相同的 someVar 以及someFuncOne,但 ClassTwo 还使用 someTableViewsomeFuncTwo 只有 ClassTwo 独有。

如何在两个类之间使用相同的协议(protocol),但另一个类具有“额外的”不同的骨架实现?

例如,如下所示:

if let vc = currentVC as? FetchProtocol
{
if vc.someVar == true
{
// Check if vc is of class type ClassOne, call someFuncOne

// Otherwise if vc is of class type ClassTwo, call someFuncOne and someFuncTwo

}
}

是否可以使用协议(protocol)实现类似上述内容,如果可以,如何正确实现,或者是否有其他替代方案?

最佳答案

您的代码无法编译,我认为您使事情过于复杂并且为了使用它们而使用协议(protocol)。。如果您只想这样做,则根本不需要使用任何协议(protocol):

if let vc = currentVC as? FetchProtocol
{
if vc.someVar == true
{
// Check if vc is of class type ClassOne, call someFuncOne

// Otherwise if vc is of class type ClassTwo, call someFuncOne and someFuncTwo

}
}

为什么不删除所有协议(protocol),只做:

if currentVC.someVar {
if let class1 = currentVC as? ClassOne {
class1.someFuncOne()
} else if let class2 = currentVC as? ClassTwo {
class2.someFuncOne()
class2.someFuncTwo()
}
}

这里你真的不需要协议(protocol),因为协议(protocol)是否存在,你仍然需要检查currentVCClassOne还是ClassTwo .

协议(protocol)就像“黑匣子”。考虑这种方法:

func foo(fetchObj: FetchProtocol) {
fetchObj.someFuncOne()
}

foo 不关心 fetchObj 到底是什么。它只是说“我不在乎你是什么,只要做 someFuncOne!”

你在这里试图做的是完全相反的:“我确实关心你是什么。如果你是ClassOne,就这样做。如果你'重新 ClassTwo,这样做。”

关于ios - 如何使不同的类遵循具有不同功能的相同协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40963172/

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