首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为目标C NSArray定义带有getter和setter的Swift协议

如何为目标C NSArray定义带有getter和setter的Swift协议
EN

Stack Overflow用户
提问于 2016-10-31 02:05:00
回答 1查看 2.7K关注 0票数 1

我这么做是为了测试。它有助于依赖注入。

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

代码语言:javascript
复制
@interface Auth : NSObject
@property (strong, readwrite) NSString *clientId;
@property (strong, readwrite) NSArray *scopes;
@end

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

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

这是我的协议:

代码语言:javascript
复制
protocol AuthProtocol {
    var clientID: String! { get set }
}

这是分机:

代码语言:javascript
复制
extension Auth: AuthProtocol {}

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

当我试图使协议定义范围数组的setter和getter时,就会出现问题。我相信NSArrayArray<AnyObject>在斯威夫特。以下是我尝试过的:

代码语言:javascript
复制
protocol AuthProtocol {
    var clientID: String! { get set }
    var scopes: Array<AnyObject> { get set }
}

现在,为扩展重新打开Auth的行抱怨

类型Auth不符合协议AuthProtocol

当我单击错误时,Xcode建议了一个解决方案,它将此代码添加到输出主体:

代码语言:javascript
复制
extension Auth: AuthProtocol {
    internal var scopes: Array<AnyObject> {
        get {
            <#code#>
        }
        set {
            <#code#>
        }
    }
}

这段代码现在在internal行上出现了一个错误:

在自己的类型中使用的scopes

如何为AuthProtocol数组定义带有getter和setter的scopes,这样行:

代码语言:javascript
复制
extension Auth: AuthProtocol {}

不抱怨吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 18:35:47

通过使用“”命令,您可以使用Xcode来显示协议的确切内容:

这将跳转到生成的代码:

代码语言:javascript
复制
open class Auth : NSObject {
    open var clientId: String!
    open var scopes: [Any]!
}

将此生成的类定义转换为正确的协议定义:

代码语言:javascript
复制
protocol AuthProtocol {
    var clientId: String! { get set }
    var scopes: [Any]! { get set }
}

// doesn't complain anymore
extension Auth: AuthProtocol {}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40335679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档