问题标签 [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.
swift - 类型 CCC 不符合协议“NSObjectProtocol”
我不明白为什么我的代码不起作用。这里是:
和错误:
类型测试不符合协议“NSObjectProtocol”。
有任何想法吗?
swift - 约束关联类型
我的代码的简化版本显示了问题:
我猜测错误的发生是因为编译器无法进入StringToInt
并验证它Input
并Output
确实分别符合InputType
和OutputType
。
对我来说,解决这个问题的最好方法是直接在协议中约束相关类型。它会更有表现力,编译器也会有更多的信息。但简单地做typealias Input: InputType
是行不通的。
有没有办法限制关联类型?
swift - 如何使用 Swift 的类似“抽象类”的协议扩展访问方法中的静态变量
我一直在尝试使用此处建议的协议和扩展在 Swift 中创建类似于抽象超类的行为:Swift 语言中的抽象类 但我不知道如何编写使用静态(类)变量的方法。例如,如果我想获取抽象形状类的周长:
Swift 不希望我在 calcPerimeter 方法中使用静态 var numSides。我知道如果我将它设为实例变量,代码就会运行,但这似乎不是正确的方法。做这个的最好方式是什么?
swift - 如何返回和使用 Swift 类类型或方法的枚举
我正在构建一个简单的状态引擎,我想要一个可以在其中移动的状态集合。
我想解决这个问题的方法是枚举可能的状态,这些状态也定义了表示该状态的相应类,这样如果我决定移动到那个状态,我就可以动态地构造状态。
在下面的代码中,我尝试构建一个运行良好的 State 对象的枚举。我卡住的地方是,我怎样才能访问这个枚举的值作为我可以从中调用静态构造函数方法的类型?在下面的代码中,我得到的错误是尝试使用枚举值调用 moveToState 并不代表 StartupStates 类型,它似乎...
所以问题真的是,为什么这不起作用,或者我有什么其他方式可以枚举类类型和/或类级别(静态)方法来调用构造函数?
swift - 是否可以在 Swift 中设置从 NSError 到自定义错误的隐式转换?
从NSHipster阅读以下内容让我想知道 NSError 以及是否可以设置一些东西以便 NSError 隐式转换为自定义错误类型。
我创建了以下内容:
还有这个
但是,我看不到任何会使隐式转换发生的事情。
我知道 C++ 中存在这样一个特性,它只有一个参数构造函数。在 Swift 中是否有类似的东西可以使用协议或其他东西?
ios - 奇怪的 Swift 协议行为
在使用 swift 协议来简化 UIPageViewController 时遇到问题:
我有这个协议
我让 UIPageViewController 呈现的所有 UIViewController 都符合这一点。
然后在我的 UIPageViewController 中,我这样做:
哪个有效,但我真正想做的是:
并且出于某种原因,每当我这样做时(对我来说,这与片段 1 完全相同),我会收到一条错误(vc as? Pagable)?.pageIndex = index
消息,即“无法分配给不可变类型的表达式Int?
”。
我彻底糊涂了。希望深入了解为什么类型系统对我这样做。
swift - Swift - 约束关联类型时编译错误
所以我不必编写太多代码来复制我的错误——在这种情况下我可能应该使用泛型,但感觉我的解决方案应该可以工作。所以下面的代码块给了我一个“类型 DCServiceClient 不符合协议 DMServiceClient”:
但是,如果我删除对关联类型(端点)的约束,它编译时不会出现任何问题。因为 DCServiceEndpoint 符合约束 (DMServiceEndpoint),所以它似乎应该编译。关于我在这里缺少什么的任何想法?多谢你们!
swift - 如何从 Swift 协议返回 `[Self]`?
我有一个协议实现如下。
我在这样的对应实施中取得了成功Method - 1
:
但我无法实现Method - 2
这样的:
我收到这样的错误:
任何返回(它自己的类)的数组形式的 Self
帮助都会很好。
swift - 具有 typealias 的协议不能符合类型 AnyObject?
我正在尝试编写一种将数据存储到 NSUserDefaults 的通用方法。我遇到的问题是NSUserDefaults.standardUserDefaults().setValue(value, forKey: key)
接受类型AnyObject?
,如果我在协议中设置类型String
,Bool
, 等不会映射到AnyObject?
,因为它们不是对象。无论如何,我怎样才能使这段代码工作而不必为每种类型实现扩展?感谢帮助!
编辑 1
实施
用例
swift - Swift:我可以返回实现公共类并符合公共协议的私有类型吗?
在 Objective-C 中,函数能够返回实现公共类和公共协议的私有类型的实例,而无需定义符合该协议的公共类。
例如,假设我有这个头文件:
而这个实现文件:
在此示例中,我的代码的使用者实际上并不知道类Bird
或Bat
类(或任何其他实现并Animal
符合.Flyer
randomFlyingAnimal
eat
fly
这样的事情在 Swift 中是可能的吗?