【问题标题】:Reference to all Swift Protocols?引用所有 Swift 协议?
【发布时间】:2014-06-23 19:05:40
【问题描述】:

Swift 有一个类接口的概念,称为Protocols。但是,我似乎无法找到 Swift API 中所有可用协议的完整参考。在哪里可以找到所有协议的列表?

【问题讨论】:

  • 它看起来并不完整,但我想知道this 是不是您要找的东西?
  • 这只是 Swift 可用性问题列表中的另一个。假设您想为数组 ContiguousArray 添加一个扩展。好吧,你会想找到一个他们都遵守的协议——可能的最高协议。但它是 Swift,因此自省受到阻碍,Xcode 对您没有帮助,Apple 也没有维护当前文档来轻松提供这样的列表。因此,相反,您要么编写一些自定义协议(增加复杂性并限制可重用性),要么混乱地从各个方法中追逐标头(并且可能仍然选择比您应该的更低)。太可怕了!

标签: swift ios8 swift-protocols


【解决方案1】:

好吧,我还没有看到任何文档,但这是我一直在使用的一个技巧(在 XCode 中):

import Swift

...然后 [CMD] - 单击“Swift”,它会将您带到 Swift 标准库的标头。

您可以在其中看到许多协议以及它们需要什么,包括ones seen in the docs(esqew 在 cmets 中提到)这有助于理解如何使用标头(至少其中的一些东西有解释)

编辑:

我只记得我在其中一个 WWDC 视频中看到了“特殊协议”列表,并截图了 :)

它们是(如幻灯片所示):

  • LogicValueif logicValue {
  • Printable"\(printable)"
  • Sequencefor x in sequence
  • IntegerLiteralConvertible65536
  • FloatLiteralConvertible1.0
  • StringLiteralConvertible"abc"
  • ArrayLiteralConvertible[ a, b, c ]
  • DictionaryLiteralConvertible[ a: x, b: y ]

Literal Convertible 意味着您可以使用文字 a la 分配给它们:

class MyString: StringLiteralConvertible {
  …
}

var x: MyString = "asdf"

有趣的是没有提到:EquatableComparable(在上面提到的文档中有介绍)

​​>

【讨论】:

    【解决方案2】:

    在哪里可以找到所有协议的列表?

    您肯定对所有协议列表感兴趣,而是对给定框架中定义的协议感兴趣。因此,也许您需要 UIKit 协议或 iAd 框架协议等。您可以在框架的文档中找到它们。

    如果您想查找项目中的所有协议,请使用 Xcode 的符号导航器(项目窗口左上角左起第二个图标,文件导航器图标右侧)。

    【讨论】:

    • 我相信他正在寻找属于 std 库的协议(其中定义了大部分语言)
    【解决方案3】:

    回答可能为时已晚,但对于其他也对此感到疑惑的人来说。

    有一个自动生成的 Swift 文档网站,其中包括关于类型、协议、运算符、全局和函数的文档。也可以更改版本以查找已删除的协议等。

    https://swiftdoc.org/

    【讨论】:

      【解决方案4】:

      对于那些仍在寻找其他协议的人,请尝试以下参考。

      https://developer.apple.com/documentation/swift/swift_standard_library/basic_behaviors

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        相关资源
        最近更新 更多