gpt4 book ai didi

Swift - 覆盖具有不同默认参数的函数

转载 作者:可可西里 更新时间:2023-11-01 01:28:34 25 4
gpt4 key购买 nike

案例:一个基类 (A) 带有一个函数 (doSomething),它有一个默认参数 (param: T = foo),一个子类 (B) 用不同的默认参数 (param: T =酒吧)。 但随后被称为 A。

编辑:对原始代码表示歉意,所以实际上发生的事情基本上如下:

class Foo
{
func doSomething(a: String = "123")
{
print(a)
}
}

class Bar: Foo
{
override func doSomething(a: String = "abc")
{
print("Using Bar method body... but not Bar's default a value!")
print(a)
}
}

(Bar() as Foo).doSomething()

// Prints:
// Using Bar method body... but not Bar's default a value!
// 123

它使用函数体但不使用函数默认参数是错误还是预期行为?

最佳答案

它被称为 Foo(或 A)因为您告诉它。因为您将 Bar() 实例化为 Foo,它正在做 < em>正是这样。

如果你这样做:

Bar().doSomething()

Bar的方法就是所谓的:

Using Bar method body...
abc

有趣的是,正如您所指出的:

(Bar() as Foo).doSomething()

产量:

Using Bar method body...
123

因为 Bar 被实例化为 Foo,(注意强调)Bar 获取 Foo 的默认参数,但仍然执行 Bar 的函数体。

有趣的观察!

关于Swift - 覆盖具有不同默认参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40024440/

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