Tag: 协议

强制variables声明的协议 – 目标C

有可能在@protocol中声明variables吗? 只是为了强迫程序员在实现类(实现此协议的类)头和实现中添加这些variables? 谢谢

传递一个Swift类作为参数,然后调用一个类方法

我希望能够将一个类作为variables存储,所以我可以稍后调用类方法,如下所示: class SomeGenericItem: NSObject { var cellClass: AnyClass init(cellClass: AnyClass) { self.cellClass = cellClass } func doSomething(p1: String, p2: String, p3: String) { self.cellClass.doSomething(p1, p2: p2, p3: p3) } } class SomeClass: NSObject { class func doSomething(p1: String, p2: String, p3: String) { … } } 我想能够像这样说: let someGenericItem = SomeGenericItem(cellClass: SomeClass.self) someGenericItem.doSomething("One", p2: "Two", […]

objective-c协议代表

我正在理解代表如何工作,已经走过了一些例子,但现在用一个基本的testing应用程序,似乎我还没有得到它, 在这里我的代码: 类定义协议> * .h #import <Foundation/Foundation.h> @protocol protoPerra <NSObject> -(void) dimeTuNombre:(NSString *) s; @end @interface MyClassic : NSObject { id<protoPerra> _delegate; } @property (assign) id<protoPerra> delegate; @end 类实施协议> * .m #import“MyClassic.h” @implementation MyClassic @synthesize delegate = _delegate; – (id)init { self = [super init]; if (self) { // Initialization code here. [[self delegate] dimeTuNombre:@"pinguete"]; […]

在Swift中检查协议的可用性

我正在采用WatchConnectivity,但我仍然支持iOS7和iOS8,因为这个库不可用。 而且我采用的协议WCSessionDelegate也不支持这个旧的系统。 在ObjectiveC中,我会使用预处理指令来屏蔽这个声明,并从不支持它们的版本中采用协议。 我如何处理在Swift中,以便应用程序不会在旧系统上崩溃?

将ViewController传递给子视图,然后再次返回,无法释放iOS中的VC

我有一个问题(与这个问题有关)。 但是根本问题与我原先想象的不同,我需要把它作为一个新的问题来发布。 但是我会更新上一个问题来引用这个问题 – 如果有人能够提供帮助的话。 我有一个UINavigationController ,它具有作为rootViewController 。 vcB然后被推到导航堆栈上。 vcB有一个子视图,它是一个UIView子类(称之为BSView ),上面有一些button。 我需要让vcB知道什么时候点击BSView上的button,所以我实现了一个@protocol就像在BBView.h一样,如下所示: @protocol BBViewDelegate <NSObject> @optional -(void)buttonAPressed; -(void)buttonBPressed; -(void)buttonCPressed; @end @interface BBView : UIView { id<BBViewDelegate> _delegate; NSString *_title; } – (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title andDelegate:(id<BBViewDelegate>)delegate; @end 和BBView.m初始化方法如下所示: – (id)initWithFrame:(CGRect)frame withTitle:(NSString *)title andDelegate:(id<BBViewDelegate>)delegate { self = [super initWithFrame:frame]; if (self) { _delegate = delegate; _title = […]

Objective-C组播代表

我在xcode中创build新的标签视图项目,在appdelegate中创build了一个协议 .h文件 @protocol myProtocol <NSObject> -(void)myProtocolMethodOne; @end . . . @property (weak) id<myProtocol> mypDelegate; .m文件 @synthesize mypDelegate; . . . //Inside didFinishLaunchingWithOptions [mypDelegate myProtocolMethodOne]; 在firstViewController&secondViewController(都显示为两个不同的选项卡),我在这两个 AppDelegate *ad = (AppDelegate*)[[UIApplication sharedApplication]delegate]; [ad setMypDelegate:self]; . . . -(void)myProtocolMethodOne { NSLog(@"1st VC"); [[self tabBarItem]setBadgeValue:@"ok"]; } 代码工作正常,但只有secondViewController响应。 我正在寻找一种使用委托而不是通知的广播和监听器机制。 我search了很多,但find了除此之外的任何解决scheme,但是代码提前让我理解,所以我正在一步一步地从一个简单的项目开始理解这一点。 请帮助我这一点。 视图控制器如何同时响应委托,我该怎么做?

如何实现一个具有通用约束types属性的Swift协议?

我想有一个看起来像这样的协议: protocol ReturnType { var returnType: ImmutableMappable.Type { get } } 执行协议的枚举部分: extension ShimEndPoint: ReturnType { var returnType: ImmutableMappable.Type { switch self { case .deAuthorize(_, _): return EmptyResponse.self case .authorize(_, _): return AuthorizeResponse.self case .step(_, _, _, _): return StepResponse.self } } } EmptyResponse,AuthorizeResponse和StepResponse都实现ImmutableMappable。 现在我想在函数调用中使用“returnType”属性: return Shim.provider .request(endPoint) .timeout(7, scheduler: MainScheduler.asyncInstance) .retry(3) .mapObject(endPoint.returnType) line mapObject给了我下面的编译器错误:“不能将types'ImmutableMappable.Type'的值转换为期望的参数types'T.Type' […]

使Swift类符合协议 – 在静态/类级别

我试图在Swift中构build一个通用的UITableViewController子类,它将容纳任何数量的不同types的表视图单元,而不需要内部知识。 要做到这一点,我试图使用我的模型和我的表格视图单元格的协议。 模型的协议将返回我应该去的单元类,单元的协议将返回问题的答案,例如单元格的高度应该是给定模型的答案。 但是我在协议的工作上遇到了问题,因为在第二个协议中,我想要转到单元的类而不是实例。 该模型的协议如下: protocol JBSTableItemDelegate { func tableCellDelegate() -> JBSTableViewCellInterface } 单元的协议如下: protocol JBSTableViewCellInterface: class { static func registerNibsWithTableView(tableView: UITableView) static func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath?, tableItem: JBSTableItemDelegate) -> CGFloat static func tableView(tableView: UITableView, dequeueReusableCellWithIndexPath indexPath: NSIndexPath, tableItem: JBSTableItemDelegate, delegate: AnyObject) -> JBSTableViewCell } 注意使用关键字“static”。 这些方法是UITableViewCell子类中的类方法,添加静态似乎是我需要做的来validation这些类符合,或者我明白。 当我使用第一个协议的代码看起来像这样,它编译: let tableViewCellInterface = tableItem!.tableViewCellInterface() 这是调用这个方法(作为一个例子): […]

预计发生types错误

所以我创build了这个方法: – (void)addToViewController:(SecViewController *)controller didFinishEnteringItem:(NSString *)item;` <br> 和Xcode不断给我Expected a type在SecViewController * Expected a type错误。 那是什么意思? SecViewController不是一个types?

用于解决inheritance委托的不兼容属性types的语法

我inheritance的一些代码有一个恼人的警告。 它声明一个协议,然后用它来指定委托 @protocol MyTextFieldDelegate; @interface MyTextField: UITextField @property (nonatomic, assign) id<MyTextFieldDelegate> delegate; @end @protocol MyTextFieldDelegate <UITextFieldDelegate> @optional – (void)myTextFieldSomethingHappened:(MyTextField *)textField; @end 使用myTextField类实现MyTextFieldDelegate并用下面的代码调用它: if ([delegate respondsToSelector:@selector(myTextFieldSomethingHappened:)]) { [delegate myTextFieldSomethingHappened:self]; } 这个工作,但创build(合法)的警告: 警告:属性types“id”与从“UITextField”inheritance的types“id”不兼容 以下是我提出的解决scheme: 删除该属性。 这工作,但我得到警告'-myTextFieldSomethingHappened:'没有在协议(S) 完全放弃协议。 没有警告,但是如果忘记在委托中实现协议,也会丢失语义警告。 有没有办法来定义委托属性,使编译器是快乐的?