【发布时间】:2016-03-16 02:09:53
【问题描述】:
我说的不是指向 C 函数的指针,而是指向 Swift 类型中的方法的指针。
struct Test: GeneratorType {
var methodPointer: mutating () -> Bool? // Non-working guess
var which: Bool
init() {
which = false
methodPointer = which ? &testMethod1 : &testMethod2 // Also non-working guess
}
//...
}
编译器说“mutating”作为函数声明的一部分是不合法的。 (实际上,它只是建议一个分号。)对于指针初始化(在我删除mutating 之后),编译器认为我正在尝试调用函数并使用它们的结果。我想在这里将这些方法用作对象本身,而不是作为函数调用。稍后我想在next 中使用指向方法;在没有弄清楚这一点的情况下,我将不得不求助于枚举标志并手动选择要在 next 中调用的方法。
我希望闭包机制的某些部分允许这样做。也许像this page, which describes functions returning functions 这样的东西。但我见过的例子都没有提到mutating 方法。
【问题讨论】:
-
您提供的链接来自 2014 年 7 月,不应被信任。那是斯威夫特问世一个月后,那些文章往往具有误导性、不正确和过时。你可以尝试关于闭包的 Swift 文档。 developer.apple.com/library/prerelease/ios/documentation/Swift/…
-
从查看this Tweet 来看,我认为
mutating方法不受支持,即使我能弄清楚如何调用非static方法。 -
我的尝试经常以“不允许部分应用'mutating'方法”结束。
标签: swift closures member-function-pointers