符合协议的 Swift 扩展

Posted

技术标签:

【中文标题】符合协议的 Swift 扩展【英文标题】:Swift extension that conforms to protocol 【发布时间】:2014-07-23 01:36:32 【问题描述】:

我在 Swift 中创建符合协议的扩展时遇到问题。

在 Objective-C 中,我可以创建一个符合协议的类别:

SomeProtocol.h

@protocol SomeProtocol
...
@end

UIView+CategoryName

#import SomeProtocol.h
@interface UIView (CategoryName) <SomeProtocol>
...
@end

我正在尝试使用 Swift 扩展实现同样的目的

SomeProtocol.swift

protocol SomeProtocol 
    ...

UIView 扩展

import UIKit
extension UIView : SomeProtocol 
...

我收到以下编译器错误:

类型“UIView”不符合协议“SomeProtocol”

【问题讨论】:

协议中的方法你实现了吗? 【参考方案1】:

请仔细检查您的扩展程序是否已实现协议中定义的所有方法。如果函数 a 没有实现,那么就会得到你列出的编译器错误。

protocol SomeProtocol 
    func a()


extension UIView : SomeProtocol 
    func a() 
        // some code
    

【讨论】:

【参考方案2】:
//**Create a Protocol:**

protocol ExampleProtocol 
    var simpleDescription: String  get 
    func adjust()-> String



//**Create a simple Class:** 

class SimpleClass 



//**Create an extension:**

extension SimpleClass: ExampleProtocol 

    var simpleDescription: String 

    return "The number \(self)"
    

    func adjust()-> String 

    return "Extension that conforms to a protocol"

    




var obj = SimpleClass() //Create an instance of a class

println(obj.adjust()) //Access and print the method of extension using class instance(obj)

结果:符合协议的扩展

希望对您有所帮助..!

【讨论】:

你能解释一下如何确认 var simpleDescription: String get set property. @RajeshKumar var simpleDescription: String get return "The number \(self)" set(desc) self.simpleDescription = desc

以上是关于符合协议的 Swift 扩展的主要内容,如果未能解决你的问题,请参考以下文章

swift 学习- 25 -- 协议 02

通过框架之间的扩展实现 Swift 协议一致性

Swift 泛型和协议扩展

扩展符合 NSFetchRequestResult 的协议

Swift 协议扩展,AssociatedType 被限制为集合,不能使用下标

无法在 Swift 2.3 中编译 Siri 扩展