当前位置: 首页 > 知识库问答 >
问题:

Swift func签名和默认参数值语法?

洪和风
2023-03-14

Swift func/闭包签名能否指定提供默认参数值?

我尝试做的一个高度简化的版本是这样的:

struct L {
    typealias W = ((String, String, String) -> Void)
    static func w(_ w:String, _ t:String = "t", _ f:String = "f") {
        let line = w + t + f
        print(line)
    }
    static let ws:[W] = [L.w, L.w]
}

L.ws[0]("sue", "seven", "red")
L.ws[0]("bill")

我在“账单”调用中得到的错误是:错误:调用中缺少参数#2的参数

我尝试将typealias行改为:

typealias W=((String, String="t", String="f")-

但这在typealias行中给出了一个错误:错误:元组类型中不允许使用默认参数

这也没有帮助:

typealias W=((字符串、字符串?、字符串?)-


共有1个答案

朱欣荣
2023-03-14
匿名用户

以下雷达:

  • 这是一个很好的例子https://github.com/lionheart/openradar-mirror/issues/12160
  • 这是一个很好的例子http://www.openradar.me/18041799这是一个很好的例子

在以下验证测试中标记为固定:

    < Li > swift/validation-test/compiler _ crashers _ fixed/00023-getcallerdefaultarg . swift
// Test case submitted to project by https://github.com/practicalswift (practicalswift)
// http://www.openradar.me/18041799
// https://gist.github.com/stigi/336a9851cd80fdef22ed
func a(b: Int = 0) {
}
let c = a
c() // expected-error {{missing argument for parameter #1 in call}}

根据上面的验证测试(特别是预期的错误),我相信通过对函数的存储引用(例如,您的示例中的< code>L.ws[0])调用函数不允许省略参数,即使指向的函数为这些省略的参数提供了默认参数值。

上述c存储闭包(/function reference)的类型将被推断为(Int)-

 类似资料:
  • 对于一些函数,你可能希望它的一些参数是 可选 的,如果用户不想要为这些参数提供值的话,这些参数就使用默认值。这个功能借助于默认参数值完成。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。 注意,默认参数值应该是一个参数。更加准确的说,默认参数值应该是不可变的——这会在后面的章节中做详细解释。从现在开始,请记住这一点。 使用默认参数值 例7.5 使用默认参数值 #!

  • 我如何在从下面的API生成的swagger中定义属性的默认值? Swashbuckle生成OrderDirection作为所需参数。我希望它是可选的,并向客户机指示默认值(不确定swagger是否支持此选项)。 我不喜欢使属性类型为空。还有其他选择吗?理想情况下使用内置类... 我用的是虚张声势的皮带扣。AspNetCore-https://docs.microsoft.com/en-us/asp

  • Scala 函数 Scala 可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。实例如下: object Test { def main(args: Array[String]) { println( "返回值 : " + addInt() ); } def

  • 哪个编译器就在这里?

  • Scala允许您指定函数参数的默认值。 可以选择在函数调用中省略这种参数的参数,在这种情况下,相应的参数将使用默认值填充。 如果指定其中一个参数,则第一个参数将使用该参数传递,第二个参数将从默认值中获取。 尝试以下示例,它是为函数指定默认参数的示例 - 例子 (Example) object Demo { def main(args: Array[String]) { print

  • 问题内容: 我正在尝试将冗长的空心“数据”类转换为命名元组。我的班级目前看起来像这样: 转换为它后看起来像: 但是这里有一个问题。我的原始类允许我只传入一个值,并通过对named / keyword参数使用默认值来处理默认值。就像是: 但这在重构的元组中不起作用,因为它希望我传递所有字段。我当然可以替换to的出现,但这并不是我喜欢的。 那么,是否存在一个可以使我的重写成功而又不增加很多代码复杂性(