gpt4 book ai didi

ios - 如何使用 Objective-C NSArray 的 getter 和 setter 定义 Swift 协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 06:31:05 25 4
gpt4 key购买 nike

我这样做是为了测试目的。它有助于依赖注入(inject)。

我有一个 Objective-C 库,我已将其导入到我的 Swift 3 项目中。 Objective-C 库中的一个类是这样定义的:

@interface Auth : NSObject
@property (strong, readwrite) NSString *clientId;
@property (strong, readwrite) NSArray *scopes;
@end

在我的 Swift 项目中,我想定义一个协议(protocol)。该协议(protocol)应定义 4 个方法:2 个 setter 和 2 个 getter。

我希望以某种方式定义协议(protocol),以便我可以在 Swift 中使用扩展重新打开 Auth 类,并声明 Auth 符合我的协议(protocol),而无需在扩展的主体中放置任何内容,因为 Objective-C 类已经符合。

这是我的协议(protocol):

protocol AuthProtocol {
var clientID: String! { get set }
}

这是扩展:

extension Auth: AuthProtocol {}

这很好用。现在我可以将 Auth 对象视为 AuthProtocols,并有权设置和获取它们的 clientID 属性。

当我尝试让协议(protocol)为范围数组定义 setter 和 getter 时,问题就出现了。我相信NSArrayArray<AnyObject>在 swift 。这是我尝试过的:

protocol AuthProtocol {
var clientID: String! { get set }
var scopes: Array<AnyObject> { get set }
}

现在重新打开的行Auth对于扩展提示

Type Auth does not conform to protocol AuthProtocol

当我单击错误时,Xcode 会建议一个解决方案,它将此代码添加到扩展的主体中:

extension Auth: AuthProtocol {
internal var scopes: Array<AnyObject> {
get {
<#code#>
}
set {
<#code#>
}
}
}

此代码现在在 internal 上有一个错误行:

scopes used within its own type

如何定义 AuthProtocol带有 scopes 的 getter 和 setter数组,以便这一行:

extension Auth: AuthProtocol {}

不提示吗?

所有这些向我表明问题与 NSArray 有关类型。

最佳答案

您可以使用 Xcode 通过使用“生成的接口(interface)”命令向您准确显示协议(protocol)应该是什么:

Generated Interface Prompt

这会跳转到生成的代码:

open class Auth : NSObject {
open var clientId: String!
open var scopes: [Any]!
}

将生成的类定义转换为正确的协议(protocol)定义:

protocol AuthProtocol {
var clientId: String! { get set }
var scopes: [Any]! { get set }
}

// doesn't complain anymore
extension Auth: AuthProtocol {}

关于ios - 如何使用 Objective-C NSArray 的 getter 和 setter 定义 Swift 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com