gpt4 book ai didi

swift - 在 Swift 中调用可选函数

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:01 24 4
gpt4 key购买 nike

我正在尝试找出一种通过数字动态调用方法的方法。这是我正在做的事情的简化版本。

class C {

func a() {}
func b() {}

let f = [0: a, 1: b]

func call(n: Int) {
f[n]?()
}
}

let c = C()

c.call(0)

当我在 Playground 上运行它时,我得到了

Playground execution failed: error: <REPL>:10:13: error: could not find an overload for 'subscript' that accepts the supplied arguments
f[n]?()
~~~~^~~

如果我跑

func a() {}
func b() {}

let f = [0: a, 1: b]

f[0]?()

直接没有包含类,它按预期工作。怎么回事?

最佳答案

这真的很有趣!我注意到,如果我将函数定义移到类之外但保持其他所有内容不变,那么您的第一段代码运行良好。从错误消息中我可以得出结论,当在类中声明函数时,需要使用类的实例调用它们。当您在类中调用 a() 时,编译器会自动将其解释为 self.a()。但是,当函数存储在变量(f[0]f[1] 等)中时,需要传递一个 class 的实例C (self) 首先。这有效:

class C {

func a() {println("in a")}
func b() {println("in b")}

let f = [0: a, 1: b]

func call(n: Int) {
a() // works because it's auto-translated to self.a()
f[n]?(self)() // works because self is passed in manually
}
}

let c = C()

c.call(0)

关于swift - 在 Swift 中调用可选函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24134299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com