swift-protocols相关内容

使快速协议符合Hasable

我在绕圈,试图让Hashable使用符合相同protocol的多个struct。 我有一个协议SomeLocation声明如下: protocol SomeLocation { var name:String { get } var coordinates:Coordinate { get } } 然后我创建多个包含类似数据的对象: struct ShopLo ..
发布时间:2022-03-28 20:26:04 移动开发

协议中的嵌套类型

可以在协议中声明嵌套类型,如下所示: protocol Nested { class NameOfClass { var property: String { get set } } } Xcode显示“此处不允许输入”: 类型“NameOfClass”不能嵌套在协议“Nest”中 我想创建一个需要具有嵌套类型的协议。这是不可能的吗?还是我可 ..
发布时间:2022-03-28 20:20:44 移动开发

SWIFT协议可以是单例的吗?

我尝试过对单例使用单行单例初始化(就像在类中一样),以下是一些错误屏幕截图: 您能否帮助我理解这些错误,以及是否可以使用单例协议? 提前感谢 推荐答案 协议本身不能是单例。这没有任何意义。协议是其他类型符合的内容。 但是如果您想声明符合Singleton的东西遵循某种规则,比如提供一个sharedInstance,那么就可以了。您的语法就是不正确。您需要将var与get一起 ..
发布时间:2022-02-27 09:59:47 移动开发

泛型函数参数和协议类型函数参数之间的实际区别是什么?

给定一个没有任何关联类型的协议: protocol SomeProtocol{var someProperty: Int { 获取 }} 这两个函数在实践中有什么区别(意思不是“一个是通用的,另一个不是")?它们是否生成不同的代码,它们是否具有不同的运行时特性?当协议或功能变得不平凡时,这些差异是否会改变?(因为编译器可能会内联这样的东西) func generic(some: T) ->诠 ..
发布时间:2022-01-31 19:00:50 移动开发

“Protocol ... can only be used as a generic constraint because it has Self or associated type requirements"是什么意思?意思是?

我正在尝试创建一个字典(实际上是一个 HashSet)键入自定义协议斯威夫特,但它给了我标题中的错误: Protocol 'myProtocol' 只能用作通用约束,因为它具有 Self 或关联的类型要求 而且我无法判断它的正面或反面. protocol Observing: Hashable { }var 观察者 = HashSet() 解决方案 协议 Observing 继承 ..
发布时间:2022-01-31 18:51:46 移动开发

Swift:无法为协议的属性赋值?

A 类提供字符串值.B类内部有两个A类成员,并提供了一个计算属性“v"来选择其中一个. class A {变量值:字符串初始化(值:字符串){self.value = 价值}}B类{var v1:A?var v2:A = A(值:“2")私有变量 v:A {返回 v1 ??v2}变量值:字符串{得到 {返回值}放 {v.value = newValue}}} 这段代码很简单,而且很有效.由于 ..
发布时间:2022-01-02 18:30:19 移动开发

为什么 Self 和 self 有时在静态函数中指代不同的类型?

最近,我一直在使用 Swift 开发多个面向协议的应用程序框架,并注意到协议扩展中静态函数的一些(看似)奇怪的行为,特别是从元类型调用扩展函数的地方. 我最初发现这些行为的方式是解决一个错误,其中对象的类型以一种看似不可能的方式改变.我追踪了这个问题并最终确定这是因为在一个静态函数中,Self 和 self 可能拥有不同的类型(注意:我已经开始调用这些“大 S 自我"和“小自我").我将使用 ..
发布时间:2022-01-01 11:12:38 移动开发

为什么我们不能转换为具有关联类型的协议类型,但使用泛型实现相同的效果?

考虑这个代码: 扩展集合{func foo() ->整数{如果 self.first 是 Collection {return (self.first as! Collection).underestimatedCount//错误}别的 {返回 self.underestimatedCount}}} 我们得到了可怕的、显然令人困惑的: 协议“Collection"只能用作通用约束,因为它 ..

什么是“协议......只能用作通用约束,因为它具有 Self 或相关的类型要求"?意思是?

我正在尝试创建一个字典(实际上是一个 HashSet)Swift,但它给了我标题中的错误: Protocol 'myProtocol' 只能用作泛型约束,因为它具有 Self 或关联类型要求 我无法理解它. protocol Observing: Hashable { }var 观察者 = HashSet() 解决方案 Protocol Observing 继承自协议 Hasha ..
发布时间:2021-12-15 09:35:32 移动开发

泛型和协议类型函数参数之间的实际区别是什么?

给定一个没有任何关联类型的协议: protocol SomeProtocol{var someProperty: Int { get }} 这两个函数在实践中的区别是什么(意思不是“一个是通用的,另一个不是")?它们是否生成不同的代码,它们是否具有不同的运行时特征?当协议或功能变得重要时,这些差异会改变吗?(因为编译器可能会内联这样的东西) func generic(some: T) ->整 ..
发布时间:2021-12-02 16:25:17 移动开发

什么是“协议......只能用作通用约束,因为它具有 Self 或相关的类型要求"?意思?

我正在尝试创建一个字典(实际上是一个 HashSet)Swift,但它给了我标题中的错误: Protocol 'myProtocol' 只能用作泛型约束,因为它具有 Self 或关联类型要求 我无法理解它. protocol Observing: Hashable { }var 观察者 = HashSet() 解决方案 Protocol Observing 继承自协议 Hasha ..
发布时间:2021-12-02 16:16:17 移动开发

在 Swift 中,如何声明符合一个或多个协议的特定类型的变量?

在 Swift 中,我可以通过如下声明来显式设置变量的类型: var 对象:TYPE_NAME 如果我们想更进一步并声明一个符合多个协议的变量,我们可以使用protocol声明: var object: protocol//etc 如果我想声明一个符合一个或多个协议并且也是特定基类类型的对象怎么办?等效的 Objective-C 如下所示: NSSomething* 对象 = ...; ..
发布时间:2021-12-02 15:56:19 移动开发

无法在 Swift 中的另一个协议中使用协议作为关联类型

我有一个协议,Address,它继承自另一个协议,Validator,Address 实现了Validator> 扩展中的要求. 还有另一个协议,FromRepresentable,它有一个 associatedType (ValueWrapper) 要求,它应该是 Validator. 现在,如果我尝试使用 Address 作为 associatedType,那么它不会编译.它说, ..
发布时间:2021-12-02 15:49:12 移动开发

协议不符合自身?

为什么这个 Swift 代码不能编译? protocol P { }结构 S: P { }让 arr:[P] = [ S() ]扩展数组其中元素:P {func test() ->[T] {返回 []}}让结果:[S] = arr.test() 编译器说:“类型 P 不符合协议 P"(或者,在 Swift 的后续版本中,“使用 'P' 作为符合协议的具体类型不支持协议“P"."). 为什 ..
发布时间:2021-12-02 15:14:16 移动开发