Tag: 协议

我可以在swift中支持多协议协议吗?

在Swift中,使用扩展名可以在“协议”中给出方法体。 在我的代码中,我可以给方法体,见 protocol Test1{ func display() } extension Test1{ func display(){ print("display Test1") } } protocol Test2{ func display() } extension Test2{ func display(){ print("display Test2") } } class ViewController: UIViewController,Test1,Test2 { var test1 : Test1? var test2 : Test2? func display() { print("display") } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup […]

面向协议的编程是否带来了遗传问题主要解决的旧代码重复问题?

概观 我试图让我的头脑围绕Swift的面向协议的编程范例。 根据苹果公司的WWDC 2015videohttps://developer.apple.com/videos/play/wwdc2015/408/协议可以实现inheritance的一切,也可以解决inheritance的基本问题。 虽然协议通过捕获每个function(function)作为协议并允许类/结构来确认多个协议来解决多重inheritance的问题,但是我相信协议不能替代inheritance,原因如下。 让我假设我正在实施学院/学校自动化软件,并有两个实体,工作人员和校长,让我们假设他们都带class上课和校长一起上课控制工作人员。 所以我创build了一个协议,它将模拟正在上课的共同能力。 所以我们来创build一个协议。 protocol staffProtocol { var classHour : Int { get set} var numberOfClass : Int? { get set } mutating func doesWork() } extension staffProtocol { mutating func doesWork(){ classHour = 9 numberOfClass = 4 print("Takes calss") } } 由于考虑课堂是一个共同的任务,既为工作人员和校长,所以我提供了一个默认的扩展,它提供了一个实施的doesWork()和说上课。 现在我们来写一个Staff结构体,它将会确认给StaffProtocol, struct Staff : staffProtocol { var classHour: […]

如何在Swift中使用相同协议variables的多个协议?

在swift中我实现了两个协议, GADCustomEventInterstitial和GADCustomEventBanner 。 这两个协议都需要一个名为delegate的属性。 delegate在每个协议中是不同的types,因此会产生冲突。 class ChartBoostAdapter : NSObject, GADCustomEventInterstitial, GADCustomEventBanner, ChartboostDelegate{ var delegate:GADCustomEventInterstitialDelegate?; // Name conflict var delegate:GADCustomEventBannerDelegate?; // Name conflict override init(){ } … }

在swift中覆盖函数错误

我有一个结构: struct ErrorResultType: ErrorType { var description: String var code: Int } 和协议: protocol XProtocol { func dealError(error: ErrorResultType) } 现在我想扩展UIViewController: extension UIViewController: XProtocol { func dealError(error: ErrorResultType) { // do something } } 所以我可以从这个子类重写像这样的function: class ABCViewController: UIViewController { —>override func dealError(error: ErrorResultType) { super.dealError(error) // do something custom } } 但它出错了: Declarations from extensions […]

子类中的Swift覆盖协议方法

我有一个基类,它实现了一个符合如下协议的扩展: protocol OptionsDelegate { func handleSortAndFilter(opt: Options) } extension BaseViewController: OptionsDelegate { func handleSortAndFilter(opt: Options) { print("Base class implementation") } } 我有一个inheritance自BaseViewController的子类“InspirationsViewController”。 而我在覆盖扩展协议方法如下: extension InspirationsViewController { override func handleSortAndFilter(opt: Options) { print("Inside inspirations") } } 当我在子类扩展中覆盖“handleSortAndFilter”函数时出现错误: “扩展中的Declerations无法覆盖” 但是我没有看到类似的问题,当我实现UITableView数据源和委托方法。 如何避免这个错误?

纯Swift类符合协议与静态方法 – 问题与上传

鉴于我们有一个static方法的Swift协议: protocol Creatable: class { static func create() -> AnyObject } 和一个符合协议的纯Swift类: class Foo : Creatable { static func create() -> AnyObject { return Foo() as AnyObject } } 稍后,当尝试通过操作typesCreatable来使用该协议时,例如: var f : Creatable = Foo.self f.create() 编译器抱怨如下: error: type 'Foo.Type' does not conform to protocol 'Creatable' 问题是:这是一个Swift的限制,或者我用错误的方式使用协议和静态/类方法。 Objective-C的等价物会是这样的: Class someClass = [Foo class]; if […]

符合协议和类的Swift属性

@property (strong, nonatomic) UIViewController<UITableViewDelegate> *thing; 我想在Swift中实现一个像这个Objective-C代码一样的属性。 所以这里是我试过的: class AClass<T: UIViewController where T: UITableViewDelegate>: UIViewController { var thing: T! } 这编译。 我从故事板添加属性时出现问题。 @IBOutlet标签会生成一个编译器错误。 class AClass<T: UIViewController where T: UITableViewDelegate>: UIViewController { @IBOutlet weak var anotherThing: UILabel! // error var thing: T! } 错误: Variable in a generic class cannot be represented in Objective-C 我正在执行这个权利? 我能做些什么来修复或解决这个错误? 编辑: […]

Swift中的纯类协议

我希望我的一些类(不是全部)使用文档中的“仅限于类的协议” 。 我在做什么 protocol RefreshData: class, ClassA, ClassB { func updateController() } 我得到的错误 non class type 'RefreshData cannot inherit from classA non class type 'RefreshData cannot inherit from classB 我不确定我是否完全按照文档。 有没有人有任何想法呢?

可以从网页链接启动iOS应用程序

我的应用程序将用户从应用程序中popup,进入Safari浏览器以执行一些网页操作(使用webview查看,但还有其他关于布局,使用情况,重新启动应用程序,服务器错误等的问题)。 当他们完成后,我想在最终的网页上的链接,让他们重新启动应用程序。 我认为这应该是可能的通过某种协议实现(如href =“myAppProtocol:// relaunch”),但我不知道如何去正确实施它。 [更新](不能回答我自己的问题,所以在这里编辑) 在发布之后偶然发现了这个问题(看上几个小时,这总是如此……) http://mobileorchard.com/apple-approved-iphone-inter-process-communication/ 在你的plist中使用一个URLtypes处理器(正如我怀疑的),你可以声明你的应用程序处理这种types的URL(比如“myAppProtocol”)。 iOS然后启动您的应用程序,并在Safari浏览器中触摸它的URL。 你从那里做什么取决于你,我只是需要启动,所以我不再采取任何行动,但你可以抓住URL并parsing出来,以获得进一步的信息等等。

Swift:协议与结构与类

我开始学习Swift语言,并且无法绕过Protocols,Structs和Classes。 我来自Android的编程方面,所以我相信Swift协议基本上是Java接口? 什么是正确的用例每个这些?