-
482 votesanswersviews
如何在'pure' Swift(没有@objc)中创建弱协议引用
weak 引用似乎在Swift中不起作用,除非 protocol 被声明为 @objc ,我在纯Swift应用程序中不需要它 . 此代码给出了编译错误( weak 不能应用于非类类型 MyClassDelegate ): class MyClass { weak var delegate: MyClassDelegate? } protocol MyClassDelegate { } 我需... -
310 votesanswersviews
如何在Swift协议中定义可选方法?
在Swift中有可能吗?如果没有,那么有解决方法吗? -
79 votesanswersviews
在Swift中,如何声明符合一个或多个协议的特定类型的变量?
在Swift中,我可以通过如下声明来明确设置变量的类型: var object: TYPE_NAME 如果我们想更进一步并声明一个符合多个协议的变量,我们可以使用 protocol 声明: var object: protocol<ProtocolOne,ProtocolTwo>//etc 如果我想声明一个符合一个或多个协议并且也是特定基类类型的对象,该怎么办? Objective... -
80 votesanswersviews
如何使枚举符合Swift中的协议?
Swift文档说类,结构和枚举都可以符合协议,我可以达到一致的程度 . 但我无法让enum表现得像类和结构示例: protocol ExampleProtocol { var simpleDescription: String { get set } mutating func adjust() } class SimpleClass: ExampleProtocol { ... -
5 votesanswersviews
使用添加默认参数的方法扩展协议
我习惯使用扩展在协议内部使用默认参数,因为协议声明本身不能使用它们,如下所示: protocol Controller { func fetch(forPredicate predicate: NSPredicate?) } extension Controller { func fetch(forPredicate predicate: NSPredicate? = nil) { ... -
45 votesanswersviews
Swift中的泛型数组
我一直在玩不同类型的泛型类数组 . 用一些示例代码解释我的问题最容易: // Obviously a very pointless protocol... protocol MyProtocol { var value: Self { get } } extension Int : MyProtocol { var value: Int { return self } } e... -
4 votesanswersviews
Swift协议强制Equatable协议
我已经定义了2个协议 . 我需要第一个(NameProtocol)来强制执行Equatable协议 . 而另一个类(BuilderProtocol)有一个方法返回第一个(NameProtocol) . public protocol NameProtocol : Equatable { var name: String { get } } public protocol BuilderP... -
6 votesanswersviews
测试协议与相关类型的一致性
我有一个使用关联类型的协议,如下所示: protocol Populatable { typealias T func populateWith(object: T) } 和实现协议的类: class DateRowType: Populatable { func populateWith(object: NSDate) { print(object.de... -
0 votesanswersviews
只有当T符合该协议时,才使泛型类型Type <T>符合协议
我正在尝试扩展 Optional 类型,使其成为 DataConvertible (我已在代码中的其他地方声明的协议),只有当 Wrapped 类型符合相同的协议时才通过添加协议一致性 . 我试过这个: extension Optional: DataConvertible where Wrapped == DataConvertible { ... } 但后来我得到了错误: 带有约束的“可选... -
118 votesanswersviews
在swift中使用协议作为数组类型和函数参数
我想创建一个可以存储符合特定协议的对象的类 . 对象应存储在类型化数组中 . 根据Swift文档协议可以用作类型: 因为它是一种类型,所以可以在允许其他类型的许多地方使用协议,包括:作为函数,方法或初始值设定项中的参数类型或返回类型作为常量,变量或属性的类型As数组,字典或其他容器中的项类型 但是,以下生成编译器错误: 协议'SomeProtocol'只能用作通用约束,因为它具有Self或相... -
6 votesanswersviews
使swift类符合协议 - 在静态/类级别
我正在尝试在Swift中构建一个通用的UITableViewController子类,它可以容纳任意数量的不同类型的表视图单元,而不具备任何内部知识 . 要做到这一点,我正在尝试为我的模型和我的表视图单元格使用协议 . 模型的协议将返回我应该去的哪个单元类,并且单元的协议将返回问题的答案,例如给定模型的单元格高度应该是什么 . 但是我在使协议工作时遇到问题,因为使用第二个协议我想要转到单元的类而不... -
0 votesanswersviews
Swift:通用协议
我有一些快速结构,其中使用具有相同方法名称的单个扩展生成协议合规性,这些名称仅在结构相关的返回类型方面不同 . 最重要的是,我想在一个泛型函数中使用它们,这些函数调用泛型类型的协议兼容函数 . 我试图这样做://:游乐场 - 名词:人们可以玩的地方 import UIKit protocol FooProt { typealias T; static func createMe<T>... -
2 votesanswersviews
Swift:在类中实现协议初始化器
我试图理解为什么Swift强制执行符合协议的类,并将初始化程序标记为必需 . 这实质上强制任何子类也实现该初始化器 . 当然,指定的超类初始化程序将被继承? 以下引用来自Swift语言指南:https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_L... -
105 votesanswersviews
什么“协议......只能用作通用约束,因为它具有自我或相关的类型要求”是什么意思?
我试图创建一个字典(实际上是HashSet)键入Swift中的自定义协议,但它给了我 Headers 中的错误: 协议'myProtocol'只能用作通用约束,因为它具有Self或相关类型要求 我无法做出头脑或尾巴 . protocol Observing: Hashable { } var observers = HashSet<Observing>() 更新: 为了最好的... -
2 votesanswersviews
具有关联类型要求和默认实现的Swift协议
很长一段时间以来,我一直在努力使用Swift协议和关联类型 . 我从基本开始再次真正了解出现了什么问题,我在Rob Napier的Swift Protocols中使用了相关类型要求的TypeErasure article,但我仍然没有运气 . 找到下面的代码 // An Animal can eat protocol Animal { associatedtype Food fun... -
2 votesanswersviews
协议'someProtocol'只能用作通用约束,因为它具有Self或关联类型要求
首先,我有一个协议来检查一致性: protocol NavigationDelegatable{ associatedtype NavigationDelegateConformance var navigationDelegate: NavigationDelegateConformance? {get set} } 然后在ViewController中我实现: class U... -
44 votesanswersviews
协议只能用作通用约束,因为它具有Self或associatedType要求
我有一个协议RequestType,它有关联类型模型,如下所示 . public protocol RequestType: class { associatedtype Model var path: String { get set } } public extension RequestType { public func executeRequest(com... -
2 votesanswersviews
扩展现有协议以符合其他协议
你好我的目标是扩展(在swift 3中)我在框架中具有的协议以符合另一个协议 protocol SomeProtocol {} protocol SomeOtherProtocol {} extension SomeOtherProtocol: SomeProtocol {} 这里的问题是我得到一个错误:“协议的扩展'SomeOtherProtocol'不能有继承子句”如果这不可能我如何实现这样... -
0 votesanswersviews
协议'BaseListPresenter'只能用作通用约束,因为它具有Self或关联类型要求
我正在定义一个具有某些功能和变量的协议 protocol BaseListPresenter { associatedtype T var values: [T] {get} } extension BaseListPresenter { public func count() -> Int { return values.count } ... -
3 votesanswersviews
如何从通用函数返回值作为协议的实现?
我想为实现这些协议的对象构建协议映射 . 然后我希望能够获得给定协议的实现 . 这是我到目前为止所得到的: class Services { var map = NSMapTable(keyOptions: .CopyIn, valueOptions: .WeakMemory) func register<T>(type: T, target: AnyObject) { ...