我什么时候应该使用协议来替换静态函数
when should I use protocol to replace static function
我对何时使用 protocol/static 功能感到困惑。
class A {
func a() {
B.b()
}
}
class B {
static func b() {
print("do sth.")
}
}
class A: B {
func a() {
self.b()
}
}
protocol B {
func b()
}
extension B {
func b() {
print("do sth.")
}
}
一个使用协议,一个使用静态函数。哪个更好?
编辑:
有关更多详细信息, func b() 将显示警报。 A是一个Controller,它会发送一个请求。如果失败,则应显示警报。请注意,有许多控制器需要显示相同的警报,所以我使用 b() 来显示它们。
One use protocol and one use static function. Which one is better?
它们完全不同,所以请使用能满足您需要的东西:
协议: 协议指定一个或多个功能,这些功能将由采用该协议的任何 class 实现。您的 class A
采用 protocol B
,因此您可以将 A
的实例传递给任何需要符合 B
的对象的方法。可能有 classes C
、D
和 E
也采用协议 B
,如果是这样,您还可以传递任何这些 class使用相同的方法。
静态函数:静态函数类似于class方法中的Objective-C,即也就是说,您可以在不需要它所属的 class 实例的情况下调用该函数。当您在第一个示例中说 B.b()
时,您所做的正是 - 调用 b()
而没有 B
的 实例 。
你举的例子太简单了,不清楚你想做什么,所以很难说一个比另一个好。但是,在实际使用中,您不太可能将它们混淆。例如,考虑 UITableViewDataSource
:它是一个协议,指定充当 table 的数据源的对象必须遵守的接口。尝试用静态函数来做这件事没有多大意义——关键是 table 不知道像 numberOfSections(in:)
这样的函数的实现应该是什么,但它确实需要知道在数据源对象中调用什么函数。
我对何时使用 protocol/static 功能感到困惑。
class A {
func a() {
B.b()
}
}
class B {
static func b() {
print("do sth.")
}
}
class A: B {
func a() {
self.b()
}
}
protocol B {
func b()
}
extension B {
func b() {
print("do sth.")
}
}
一个使用协议,一个使用静态函数。哪个更好?
编辑: 有关更多详细信息, func b() 将显示警报。 A是一个Controller,它会发送一个请求。如果失败,则应显示警报。请注意,有许多控制器需要显示相同的警报,所以我使用 b() 来显示它们。
One use protocol and one use static function. Which one is better?
它们完全不同,所以请使用能满足您需要的东西:
协议: 协议指定一个或多个功能,这些功能将由采用该协议的任何 class 实现。您的 class A
采用 protocol B
,因此您可以将 A
的实例传递给任何需要符合 B
的对象的方法。可能有 classes C
、D
和 E
也采用协议 B
,如果是这样,您还可以传递任何这些 class使用相同的方法。
静态函数:静态函数类似于class方法中的Objective-C,即也就是说,您可以在不需要它所属的 class 实例的情况下调用该函数。当您在第一个示例中说 B.b()
时,您所做的正是 - 调用 b()
而没有 B
的 实例 。
你举的例子太简单了,不清楚你想做什么,所以很难说一个比另一个好。但是,在实际使用中,您不太可能将它们混淆。例如,考虑 UITableViewDataSource
:它是一个协议,指定充当 table 的数据源的对象必须遵守的接口。尝试用静态函数来做这件事没有多大意义——关键是 table 不知道像 numberOfSections(in:)
这样的函数的实现应该是什么,但它确实需要知道在数据源对象中调用什么函数。