15得票1回答
在Swift 4中使用KVObserving协议

我正在努力使用Swift 4中的新强类型KVO语法来观察仅通过协议可见的属性:import Cocoa @objc protocol Observable: class { var bar: Int { get } } @objc class Foo: NSObject, Obse...

104得票15回答
如何在Swift中使枚举符合协议?

Swift文档指出,类、结构体和枚举都可以遵循协议,并且我可以使它们都符合要求。但是我无法让枚举的行为与类和结构体的示例完全相同:protocol ExampleProtocol { var simpleDescription: String { get set } mutat...

7得票1回答
任何协议都可以符合Codable协议吗?

我正在尝试在Swift 5.7中创建一个具有[任何协议]的Codable结构体。 struct Account: Codable { var id: String var name: String var wallets: [any Wallet] } protoc...

8得票2回答
在纯Swift中,声明协议为@objc和使其符合NSObjectProtocol之间有什么区别?

考虑两个Swift协议: @objc protocol SomeProtocol { } protocol SomeOtherProtocol: NSObjectProtocol { } 声明Swift协议时使用@objc和让其符合NSObjectProtocol有什么区别?我知道任何...

127得票3回答
非 '@objc' 方法不满足 '@objc' 协议的可选要求。

概览: 我有一个协议P1,它提供了Objective-C可选函数的默认实现。 当我提供可选函数的默认实现时,会出现警告。 编译器警告:Non-'@objc' method 'presentationController(_:viewControllerForAdaptivePresen...

8得票2回答
从云记录(或其他外部来源)中使用通用函数填充对象

我正在为我的Swift应用程序构建通用API。我使用CoreData进行本地存储,使用CloudKit进行云同步。 为了能够在通用函数中处理我的数据对象,我将它们组织如下(简要概述): 进入CoreData数据库的对象是符合ManagedObjectProtocol协议的NSManage...

601得票8回答
如何在“纯”Swift中创建一个弱协议引用(不使用@objc)

weak引用在Swift中似乎无法正常工作,除非声明一个@objc的protocol,但在纯Swift应用程序中我不想这样做。这段代码会产生编译错误(weak不能应用于非类类型MyClassDelegate):class MyClass { weak var delegate: MyCla...

26得票2回答
泛型和协议类型函数参数在实践中有什么区别?

给定一个没有任何关联类型的协议: protocol SomeProtocol { var someProperty: Int { get } } 这两个函数实际上有什么区别(不是“一个通用,一个不通用”)?它们是否生成不同的代码,是否具有不同的运行时特征?当协议或函数变得复杂时,...

153得票3回答
协议不符合自身?

为什么这段 Swift 代码无法编译? protocol P { } struct S: P { } let arr:[P] = [ S() ] extension Array where Element : P { func test<T>() -> [T] ...

7得票2回答
使用关联类型测试协议一致性

我有一个使用关联类型的协议,如下所示: protocol Populatable { typealias T func populateWith(object: T) } 以及实现该协议的类: class DateRowType: Populatable { f...