使用不允许转义函数的参数创建Swift函数?

时间:2015-05-15 19:31:17

标签: swift

我有一个只在另一个函数的上下文中调用的函数,所以我希望快速停止消费者捕获内部函数:

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
        }
    }
}

我希望阻止像CapturingBadFooImplAsyncBadFooImpl这样的定位。

1 个答案:

答案 0 :(得分:1)

Swift有嵌套函数。听起来你想让你的功能嵌套在另一个内部。或者,如果您正在创建框架,则可以将您的功能设为私有。这可以防止它在其模块(框架)之外使用。

如果你不是指其中一件事,你就必须更清楚地解释你想要的东西。