在此视频:https://developer.apple.com/videos/play/wwdc2019/103/中,以下代码段显示在15:30左右:
auto
它有什么作用? <a href="test.html" div="mydiv" class="myclass" layer="mylayer">Hi</a>
<button type="button" name="button" value="btnValue" id="btn">Hi again</button>
指向哪里?当前对象(const items = document.querySelectorAll('a,button');
for (let item of items) {
item.addEventListener('click', event => {
event.preventDefault();
let attribute_object = {};
for (let attribute_key in event.target.attributes) {
const key = parseInt(attribute_key);
if (key >= 0) {
const attribute = event.target.attributes[key];
attribute_object[attribute.name] = attribute.value;
}
}
console.log(attribute_object);
})
}
)?由于...
ForEach(ContentSizeCategory.common.identified(by: \.self))
...
不是self
的成员,因此它甚至无法在我的计算机中编译。我以为我以前在TraitCell_Preview
谈话(common
)中看过它。 ContentSizeCategory
在Swift中并不是我最好的东西。
我了解SwiftUI
的元素必须为\.self
。 Keypath
(又名ForEach
对吗?)仅符合Identifiable
,而不符合self
(如果TraitCell_Preview
符合的私有PreviewProvider
协议不符合Identifiable
,对此不确定,因为我看不到代码)。
代码段中的_PreviewProvider
是什么?它指向何处?
答案 0 :(得分:3)
common
是他们创建的static
变量来帮助演示。它只是ContentSizeCategory
的扩展。像这样:extension ContentSizeCategory {
static var common = [ContentSizeCategory.accessibilityLarge,
ContentSizeCategory.accessibilityMedium,
ContentSizeCategory.extraSmall]
}
ContentSizeCategory
是一个枚举,符合Hashable,这意味着每种类型都是唯一可识别的。以下是identified
函数的签名,当调用该函数时,您需要说明为唯一标识项目应使用的关键路径是什么。因此\.self
基本上是在说整个自我是唯一的,因为它符合Hashable。func identified<ID>(by getID: KeyPath<Binding<Value.Element>, ID>) -> IdentifierValuePairs<Binding<Value>, ID> where ID : Hashable
答案 1 :(得分:1)
方法self
是一个返回对象本身的属性,例如:
let string = "text"
print(string[keyPath: \.self]) // "text"
我们在访问类型时也使用它,例如Int.self
。
我假定整个实例都用作标识符。