问题标签 [swift-protocols]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
164 浏览

swift - Swift @objc 协议 - 区分具有相似签名的可选方法

假设我们在 Swift 中有一个协议:

请注意,这两种方法都是可选的,并且具有相同的前缀签名。

现在我们的FancyView类看起来像这样:

编译器在我们面前跳跃:

在此处输入图像描述

我们可以改成somethingHappened()这样:

然而,正如你所看到的,我们冒着做大量工作的风险,只是为了在之后丢弃索引,因为委托没有实现可选方法。

问题是:我们如何if letguard let绑定两个具有相似前缀签名的可选方法的实现。

0 投票
1 回答
302 浏览

swift - 带有结构/协议的 Swift 多态闭包调度

我有一个案例,我想向服务注册一个参数或不注册参数闭包。总是有一个可用的参数,但为简洁起见,我希望能够不注册任何 arg 闭包,然后在这种情况下只调度没有可用参数的闭包。来自强大的 OO 和动态类型背景,我们喜欢多态调度和类继承树并让类型自己弄清楚,我可以将以下内容放在一起:

所以我在我的控制台中42看到了。something happened伟大的。

但我想探索用structand/or来做这件事enum。价值语义风靡一时。我认为这种enum方法相对简单:

做一个struct方法,我的理解是我应该使用协议来捕获publish(value:T). 但这就是事情变得混乱的地方,因为协议显然不能与泛型混合?我试过了:

这只会在底部产生很多错误。我曾尝试将扩展作为泛型(例如extension NullaryAction<T>:Action),但它告诉我这T是未使用的,即使我已将typealias表达式放在扩展中。

是否可以使用结构/协议来做到这一点?我对枚举解决方案感到满意,但很失望我无法通过结构/协议方法实现它。

0 投票
1 回答
289 浏览

swift - 使用 Container 在 Swift 中查看另一个 ViewController 时通过协议传递数据

我开始研究这个问题应用程序。我从 tableView 的类别开始:

在此处输入图像描述

对于数据交换,我决定使用一个协议:

在第一个 ViewController 中有以下代码:

在第二个 ViewController(Container 中的 tableView)中有如下代码:

对我来说,显然没关系。但是模拟器上什么也没出现。

在此处输入图像描述

我的问题是:如果容器用来呈现另一个 viewController 作为通过协议传递数据应该做吗?

0 投票
1 回答
184 浏览

swift - Class-internal Protocols in Swift

How can I implement class-internal protocols in Swift?

The problem is that

results in the error

Declaration is only valid at file scope

Any ideas for bypassing the problem?

Exclusion: I do not refer to class-only protocols, which is possible, of course.

0 投票
1 回答
1028 浏览

swift - 从协议扩展实例方法中读取静态变量

假设我们有一个 Swift 协议:

有没有办法someString像这样从扩展实例方法访问?

我得到一个编译器错误:

静态成员“someString”不能用于“Self”类型的实例

有没有办法做到这一点?

0 投票
1 回答
111 浏览

swift - 两种协议的协议类型约束

我在 swift 2 中设置了以下两个协议

  • 生成(因为没有更好的名字),它包含一个项目数组并提供类似数据源的功能,如计数和下标

因此,如果一个对象同时实现了 Generative 和 Selectable ,那么我希望它能够返回选定的索引,所以我编写了这个函数:

由于某种原因,链接器会打印出:

由于信号,命令失败:分段错误:11

不知道为什么,我想不出另一种方法来指定这个函数来处理实现协议及其关联类型匹配的对象......有什么想法吗?

PS Gist 中的代码:https ://gist.github.com/edwardIshaq/715b0e134fb47d2e28cc

------- UPDATE 删除计算属性似乎可以解决问题:

0 投票
1 回答
1615 浏览

swift - Swift 中容器视图和 ViewController 之间的委托

之前问过这个问题,我得到了他所寻求的解决方案。现在,我需要放大我的问题。使用委托,如何创建一个委托给 ViewController 将数据发送到 ContainerView 和 ContainerView 将数据发送到 ViewController

0 投票
3 回答
21434 浏览

swift - 在 ViewController 和 ContainerViewController 之间传递数据

我正在开发一个应用程序,需要在视图和容器视图之间传递数据。我需要从两个视图发送数据和接收数据。

让我更好地解释一下:

我可以通过协议更改标签主控(触摸容器按钮),但我不能更改标签容器(触摸主控按钮)。发生的情况是 Master 通过以下方式与容器连接。但是没有一个follow Container链接到Master。

我试图添加但继续,但它奏效了。

在此处输入图像描述

主视图控制器:

容器视图控制器:

有人能帮我吗?

0 投票
1 回答
122 浏览

swift - Swift 2:如何在协议中函数的默认实现中引用元素的类型

我需要从 REST API 获取一些对象并使用 ObjectMapper 将它们映射到本地对象。

这些对象包含许多枚举。它们都以整数形式出现,我想将它们映射到本地描述的枚举。

为此,我必须描述 ObjectMapper 使用的标准转换函数。

问题是我有许多这样的枚举,并且函数在所有枚举中都是完全相同的,除了TransformOf<..>列表中的第一个参数是特定于每个枚举的。

我想要做的是创建一个具有该功能的默认实现的通用协议,例如

...然后将具有实现的协议应用于我拥有的所有枚举。

显然 reference ofself.Type在那里不起作用,我只是不知道如何一般地引用最终将使用该函数的特定实例的类型?可能我在想解决这个问题的错误方法。

0 投票
4 回答
24313 浏览

ios - 为什么我不能在 Swift 中使用 let in 协议?

我对 Swift 中关于var关键字 { get set }的使用的协议有疑问。

苹果文档

如果协议要求属性是可获取和可设置的,则该属性要求无法通过常量存储属性或只读计算属性来满足。如果协议只要求属性是可获取的,那么任何类型的属性都可以满足该要求,并且如果这对您自己的代码有用,那么属性也是可设置的也是有效的。

属性要求总是声明为变量属性,前缀为 var 关键字。可获取和可设置属性在其类型声明后通过写 { get set } 表示,而可获取属性通过写 { get } 表示。

我不明白为什么我不能使用let。协议中只有getvar不只是let吗?

像这样的东西:

这不仅仅是:

我错过了什么?