我有一个只在另一个函数的上下文中调用的函数,所以我希望快速停止消费者捕获内部函数:
protocol Foo {
func bar(onlyValidToCallInsideBar: () -> Void)
}
class GoodFooImpl {
func bar(onlyValidToCallInsideBar: () -> Void) {
// do some stuff
onlyValidToCallInsideBar()
// do some more stuff
}
}
class CapturingBadFooImpl {
var badCaptureOfOnlyValidToCallInsideBar: (() -> Void)?
func bar(onlyValidToCallInsideBar: () -> Void) {
badCaptureOfOnlyValidToCallInsideBar = onlyValidToCallInsideBar
}
func fizz() {
badCaptureOfOnlyValidToCallInsideBar!()
}
}
class AsyncBadFooImpl {
func bar(onlyValidToCallInsideBar: () -> Void) {
dispatch_async(dispatch_get_main_queue()) {
onlyValidToCallInsideBar()
}
}
}
class FooConsumer {
func buzz(foo: Foo) {
bar() {
// This should only be called inside bar
}
}
}
我希望阻止像CapturingBadFooImpl
和AsyncBadFooImpl
这样的定位。
答案 0 :(得分:1)
Swift有嵌套函数。听起来你想让你的功能嵌套在另一个内部。或者,如果您正在创建框架,则可以将您的功能设为私有。这可以防止它在其模块(框架)之外使用。
如果你不是指其中一件事,你就必须更清楚地解释你想要的东西。