onlyValidToCallInsideBar

onlyValidToCallInsideBar

我有一个仅在另一个函数的上下文中可以调用的函数,所以我想迅速阻止使用者捕获内部函数:

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这样的影响。

最佳答案

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

如果您的意思不是其中之一,则必须更清楚地解释您想要的内容。

10-08 13:54