Tag: 协议

Swift – 协议扩展 – 属性默认值

假设我有以下协议: protocol Identifiable { var id: Int {get} var name: String {get} } 而且我有以下结构: struct A: Identifiable { var id: Int var name: String } struct B: Identifiable { var id: Int var name: String } 正如你所看到的,我必须“符合”在结构A和结构B的可识别协议。但想象一下,如果我有更多的结构需要符合这个协议…我不想'复制/粘贴一致性(var id:Int,var name:String) 所以我创build了一个协议扩展 : extension Identifiable { var id: Int { return 0 } var name: String { […]

KVO vs NSNotification vs协议/代表?

虽然我有一些想法用于什么时候,但确切的用法还不清楚。 有人可以用例子来解释吗? 谢谢。

ObjC协议在Swift中的实现

好的,这是一个大问题。 我有一个用ObjC( 这个 )写的图书馆。 我们有一个定义的协议。 当我试图在swift文件中使用它时,我经常得到: types“XXX”不符合协议“XXX” 为了简化我制定的testing项目 – 它应该被创build为Swift项目。 然后使用下面的协议创buildObjC头文件(我称之为StupidProtocol.h)(请注意每个名称和值与给定的名称和值完全匹配,包括大写/小写): @protocol MyProtocol <NSObject> – (NSString *)getAxisLabel:(id)axis Value:(CGFloat)value; @end 在桥接标题中: #import "StupidProtocol.h" 然后回到Swift文件中: class ViewController: UIViewController, MyProtocol { func getAxisLabel(axis: AnyObject!, value: CGFloat) -> String! { return "" } } 而且我们还是得到了这个错误,尽pipeauto-complete完成了getAxisLabel函数。 我强烈怀疑问题是有“价值”的参数,它的function参数“价值”。 任何帮助将不胜感激。 编辑 请注意, 这个库在技​​术上不是我的,所以我不能改变它。 我需要一种方法来在Swift中使用它,而不改变它的原始声明。 我的例子只是为了简化我的问题。 我试过了什么 我尝试了以下scheme,但没有成功: '与协议所要求的错误名称不同 func getAxisLabel(axis: AnyObject!, Value […]

在XCode中自动实现Swift协议方法

我刚刚开始用快速的语言,从Java来看,它看起来很棒。 但我真的错过了一些东西: Eclipse有这个伟大的function,当我添加“实现XYZ”它提供了一个function,自动实现必要的function桩。 这是一个巨大的时间。 XCode似乎没有这个function,或者我错过了什么? 我find了accessorize插件,但是这似乎只适用于Objective C .. 有解决scheme吗? PS。 我正在使用XCode 6.1.1

Swift:types必须实现协议,并成为给定类的子类

在Objective-C中,你可以定义一个types作为一个给定的类,并实现一个协议: – (UIView <Protocol> *)someMethod; 这将告诉someMethod返回的值是一个UIView实现给定的协议Protocol 。 有没有办法在Swift中执行类似的东西?

如何在Swift中使用扩展协议公开obj-C类的现有属性

在Swift 1.1中,我们能够通过扩展添加的协议,在下面的代码中进行编译和工作,在这里我们公开了现有的Objective-C属性。 我们也有几个地方是由延期处理的。 @objc protocol Enableable: class { var enabled: Bool { get set } } let DisabledAlpha: CGFloat = 0.5 let EnabledAlpha: CGFloat = 1.0 extension UIButton: Enableable {} extension UIImageView: Enableable { var enabled: Bool { get { return alpha > DisabledAlpha } set(enabled) { alpha = enabled ? EnabledAlpha : DisabledAlpha } […]

无法find协议声明

我有两个对象,都是视图控制器。 第一个(我把它称为viewController1)声明一个协议。 第二个(毫不奇怪,我将命名viewController2)符合这个协议。 XCode给我一个构build错误:'找不到viewController1的协议声明' 我已经看到了这个问题上的各种问题,我确定这是一个循环错误,但我不能看到它在我的情况下… 下面的代码 viewController1.h @protocol viewController1Delegate; #import "viewController2.h" @interface viewController1 { } @end @protocol viewController1Delegate <NSObject> // Some methods @end viewController2.h #import "viewController1.h" @interface viewController2 <viewController1Delegate> { } @end 最初,我在viewController1的协议声明的上面有导入行。 这阻止了这个项目的build设。 在search完成后,我意识到了这个问题,并转换了两条线。 我现在得到一个警告(而不是一个错误)。 该项目build立良好,实际运行完美。 但我仍然觉得一定有什么不对的地方可以给予警告。 现在,就我所知,当编译器到达viewController1.h时,它看到的第一件事就是协议的声明。 然后导入viewController.h文件,并看到这个实现了这个协议。 如果是以相反的方式编译它们,它首先会查看viewController2.h,并且首先会导入viewController1.h,其中第一行是协议声明。 我错过了什么吗?

使用委托和协议在2 UIViewController之间传递数据

我知道这个问题已经在这里被问及过很多次了。 但是,我是第一次处理这个事情,仍然无法在脑海中得到完美的实现。 这里的代码我有委托方法我实现从SecondViewController传递数据到FirstViewController 。 FirstViewController.h #import "SecondViewController.h" @interface FirstViewController : UITableViewController<sampleDelegate> @end FirstViewController.m @interface FirstViewController () // Array in which I want to store the data I get back from SecondViewController. @property (nonatomic, copy) NSArray *sampleData; @end @implementation FirstViewController – (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { SecondViewController *controller = [[SecondViewController alloc] init]; [self.navigationController pushViewController:controller animated:YES]; } […]

什么是协议和委托,他们如何在IOS中使用?

我真的很困惑代表和议定书的概念。 它们是否等同于Java中的接口和适配器类? 他们如何工作? 到目前为止,我读过的资源都没有帮助。 “委托是一个简单而强大的模式,其中一个程序中的一个对象代表另一个对象或者与其他对象协同工作。委托对象保持对另一个对象的引用 – 委托 – 并在适当的时候发送消息对它“。 我不知道这是什么意思。 有人可以解释他们是什么,并举一个简单的例子? 提前致谢! 编辑: 据我了解, 1)委托实现协议(接口的另一个名称) 2)对象注册一个委托(实现一个协议) 3)对象可以调用委托的协议方法 因此,委托将对象与协议连接起来。 如果我错了,请纠正我。 我仍然不明白为什么对象本身不能实现一个协议? 它可以更容易!

如何将符合相关types的协议的不同types添加到集合中?

作为学习练习,我正在用Swift重写我的validation库 。 我有一个ValidationRule协议,它定义了什么样的个人规则: protocol ValidationRule { typealias InputType func validateInput(input: InputType) -> Bool //… } 关联的typesInputType定义了要validation的input的types(例如String)。 它可以是明确的或通用的。 这里有两条规则: struct ValidationRuleLength: ValidationRule { typealias InputType = String //… } struct ValidationRuleCondition<T>: ValidationRule { typealias InputType = T // … } 在其他地方,我有一个函数用一个ValidationRule集合来ValidationRuleinput: static func validate<R: ValidationRule>(input i: R.InputType, rules rs: [R]) -> ValidationResult { let errors = […]