gpt4 book ai didi

swift - Identifiable 协议(protocol)的@available 是如何工作的

转载 作者:行者123 更新时间:2023-12-01 10:01:55 25 4
gpt4 key购买 nike

protocol Identifiable is defined available above iOS 13 in Swift > Misc

/// A class of types whose instances hold the value of an entity with stable identity.
@available(OSX 10.15, iOS 13, tvOS 13, watchOS 6, *)
public protocol Identifiable {

/// A type representing the stable identity of the entity associated with `self`.
associatedtype ID : Hashable

/// The stable identity of the entity associated with `self`.
var id: Self.ID { get }
}

@available(OSX 10.15, iOS 13, tvOS 13, watchOS 6, *)
extension Identifiable where Self : AnyObject {

/// The stable identity of the entity associated with `self`.
public var id: ObjectIdentifier { get }
}

但是当我将部署目标设置为 iOS 13.0 ex) below 11.0没有任何编译错误发生。

struct People: Identifiable {
var id: String {
return ""
}
}

let people = People()
print(people.id) // There are no compile error

问题是 Swift.Identifiable 的 @available 注释是如何工作的?

最佳答案

即使您支持没有该协议(protocol)的 iOS 版本,您也可以将对象声明为符合协议(protocol),只是无法在这些版本中使用该协议(protocol)一致性。

例如,您将无法执行此操作:people as? Identifiable无需将其包装在 #available 中 block 。

您可以访问people.id没有编译器错误,因为它只是一个普通的 String即使没有 Identifiable 仍然是结构的一部分的属性一致性。

如果您的对象被声明为一个类并且依赖于默认的 id它从协议(protocol)一致性中获取的属性,那么您将无法访问 id没有可用性检查的属性:

class People: Identifiable {

}

let people = People()
print(people.id) // compiler error outside of #available check

关于swift - Identifiable 协议(protocol)的@available 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58803468/

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