swift - 创建一个带有不允许转义函数的参数的 Swift 函数?

标签 swift

我有一个函数,只能在另一个函数的上下文中调用,因此我希望 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 这样的 impl。

最佳答案

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

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

关于swift - 创建一个带有不允许转义函数的参数的 Swift 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30267382/

相关文章:

ios - 访问快速枚举中的值

xcode - Xcode 6 中是否有键盘快捷键可以在光标下运行单个当前测试函数?

ios - 避免将对象重复保存到 Realm 的正确方法是什么?

ios - 如何让多个UIImage同时受重力下落?

ios - SWIFT:iPhone 被握住或放在 table 上 “upwards”

ios - NSUserDefaults.standardUserDefaults().stringForKey ("useremail") 值返回 null

ios - SecKeyCopyKeyExchangeResult 在 iOS 13 中不能用作 nodejs ecdh

swift - '强制为任何',但属性是 UIColor 类型

ios - 为未调用的 UIButton 添加目标

ios - SWIFT:让视频下载速度更快的提示?