首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift5 @dynamicMemberLookup函数

Swift5 @dynamicMemberLookup函数
EN

Stack Overflow用户
提问于 2020-01-02 06:06:46
回答 1查看 477关注 0票数 0

@dynamicMemberLookup下标函数。

没有使用parameterName是错误。

为什么?

@dynamicCallable是可以的。

代码语言:javascript
复制
    @dynamicMemberLookup
    struct DynamicMember {
        // OK.
        subscript(dynamicMember string: String) -> String {
            return string
        }
        // NG.
        // none parameterName func. Why error?
        // @dynamicMemberLookup attribute requires 'Dynamic' to have a 'subscript(dynamicMember:)' method that accepts either 'ExpressibleByStringLiteral' or a keypath
        /*
        subscript(dynamicMember: String) -> String {
            return dynamicMember
        }
        */
    }

    let dm = DynamicMember()
    print(dm.dynamicProperty)

@dynamicCallable,无参数名,OK。

代码语言:javascript
复制
    @dynamicCallable
    struct DynamicCall {
        // OK.
        func dynamicallyCall(withArguments list: [Int]) -> [Int] {
            return list
        }
        // OK.
        // none parameterName func.
        // dynamicCallable is OK.
        /*
        func dynamicallyCall(withArguments: [Int]) -> [Int] {
            return withArguments
        }
        */
    }

    let dc = DynamicCall()
    print(dc(1, 2, 3))

编译错误?

请告诉我你认识谁。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-02 16:48:47

dynamicallyCall是一个函数,但dynamicMemberLookup是一个下标,它有变体。这是故意的

( a)允许密钥路径访问(对您的示例而言)

代码语言:javascript
复制
print(dm[dynamicMember: "dynamicProperty"])

( b)但不允许模棱两可,比如

代码语言:javascript
复制
dm["dynamicProperty"]

见官方详细信息论斯威夫特进化

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59558946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档