gpt4 book ai didi

Swift5 @dynamicMemberLookup 函数

转载 作者:行者123 更新时间:2023-11-30 10:28:56 27 4
gpt4 key购买 nike

@dynamicMemberLookup下标函数。
不能使用parameterName 错误。
为什么?
@dynamicCallable 可以。

    @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。

    @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))

编译器错误?
请告诉我你认识谁。

最佳答案

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

a) 允许关键路径访问(对于您的示例)

print(dm[dynamicMember: "dynamicProperty"])

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

dm["dynamicProperty"]

详情见官方on Swift Evolution

关于Swift5 @dynamicMemberLookup 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59558946/

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