是始终需要Swift 4自定义参数标签还是只是为了消除功能歧义?

皮埃尔·范·阿斯威根(Pierre van Aswegen)

这个问题类似于Swift 4自定义参数标签-是否必需?但更具体。在研究由var(不需要参数)更改为func(需要参数)而导致的问题时,我遇到了这个问题,但是却错过了更改所有引用的麻烦。我创建了一个游乐场,该游乐场与对该问题的后续编辑中的主张相矛盾:“问题不正确,因为自定义标签是强制性的”。我的问题是:如何正确表达我观察到的内容,如下所示:

class SomeTest {
    static func someParam(p1: String?) -> String? {
        return "hello \(p1 ?? "nothing")"
    }

    // Uncommenting the following causes error at let funny
    //    static func someParam(p2: String?) -> String? {
    //        return "hello \(p2 ?? "nothing")"
    //    }

    static func doIt() {
        let funny = someParam // ignoring the argument label is ok if there is no ambiguity

        funny("thing") // and can be used without

        someParam(p1: "thing2") // must have argument label
    }
}

SomeTest.doIt()
rmaddy

如果您同时具有这两个someParam函数(每个函数都有一个不同名称的参数),则该行:

let funny = someParam

不再起作用,因为不知道someParam您指的是两个功能中的哪个通过提供明确的名称可以解决此问题:

let funny = someParam(p1:) // or someParam(p2:)

请注意,funny其类型为(String?) -> String?这两个someParam函数具有相同的类型。这就是为什么您需要提供更多细节来消除两者的歧义。参数名称不会更改函数类型。

直接调用函数时,必须提供完整的函数名称,其中包括任何命名的参数标签。

但是,当您创建一个闭包变量并为其分配函数值时,如果该名字在给定的上下文中是明确的,则无需提供太多功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

始终需要查询参数

Swift 4中的自定义Datepicker标签

自定义对象的Swift数组包含:需要插入“ where:”

需要为 UIView Swift 创建自定义形状

始终需要采用反应形式的ngBootstrap for Angular 4 DatePicker

Swift中何时需要参数标签?

Swift在数组中使用自定义类型,但始终打印类型名称而不是值

我是否始终需要静态IP才能访问GKE中自定义域上的前端?

Swift 撤消功能,先前声明的变量始终为空

字符串的Swift 4 DateFormater始终为零

在 swift 4 中将数据解析为 vc 始终为零

自定义元素是否需要关闭标签?

自定义“折叠”功能需要计数器

TFS 2013:工作项自定义:自定义字段需要 TreePath 功能

Keras自定义层和自定义损失功能-需要保留状态

我应该共享Materializer实例还是在需要时始终创建一个新实例?

Swift:通话中需要额外的参数

定义需要特定序列类型的Swift协议

我是否需要始终在 HTML5 中指定开始的 <html> 标签?

vuex mapState是否始终需要模块名称作为参数,即使命名空间为:false

自定义相机需要很长时间保存图像(Swift和AVFoundation)

Swift:TableView 不使用自定义标签栏滚动

是否始终需要executePendingTransactions()?

Debian:一个MTA只是为了解决依赖关系,不是因为我真的需要一个

我需要子报表只是为了获取一些值(返回值)。是否可以隐藏子报表但保持其可运行?

iOS的自定义控件始终偏移

自定义UserManager始终返回null

自定义TableViewCell中的标签始终返回其初始化值

ActionLink 参数始终为空 - 即使使用自定义路由