我有两个view controllers A和B,他们都拥有对方作为自己的代表.
当我除了在头文件的开头和#import另一个头文件中定义协议之外什么都没做的时候,我得到两个错误 -
找不到"BDelegate"的协议声明,它在Ah(我写的地方)中显示无法找到"ADelegate"的协议声明,这是在Bh(我写的地方)中显示的
在线查看,人们早些时候写过,包含头文件的循环包含可能会导致问题.他们建议使用#include相反,或@class声明像 -
@class A
Run Code Online (Sandbox Code Playgroud)
代替
#import A.h
Run Code Online (Sandbox Code Playgroud)
内 #import B.h
我几乎试过这些进口的每一种组合,而且@classes,#include但仍然无法摆脱警告.此外,在线解决方案建议移动#import到.m文件,但这也没有帮助.部分原因是在线解决方案有点模糊 - 如果你可以分解它会很棒.
关于可以做些什么来解决这个问题的任何建议?
- BigViewController.h -
#import "BaseViewController.h"
#include "BaseViewController.h"
@class BigViewController;
@protocol BigViewControllerDelegate
-(void) BigViewController:(BigViewController *) bigView;
@end
@interface BigViewController : UIViewController <BaseViewControllerDelegate>
{
//delegate
id <BigViewControllerDelegate> delegate;
ivars...
}
@properties...
@end
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
- BaseViewController.h -
#<UIKit/UIKit.h>
#import "BigViewController.h"
#include "BigViewController.h"
@class BigViewController;
@protocol …Run Code Online (Sandbox Code Playgroud) 我对Swift中有关var的使用和关键字{get set}的协议有疑问.
来自Apple文档:
如果协议要求属性可获取和可设置,则不能通过常量存储属性或只读计算属性来满足该属性要求.如果协议只要求属性可以获取,那么任何类型的属性都可以满足要求,如果这对您自己的代码有用,则该属性也可以设置.
属性要求始终声明为变量属性,前缀为var关键字.Gettable和settable属性通过在类型声明后写入{get set}来指示,并且通过编写{get}来指示gettable属性.
我无法理解为什么我不能使用let.只有get的协议中的var不只是一个let?
像这样的东西:
protocol someProtocol
{
var someProperty: String { get }
}
Run Code Online (Sandbox Code Playgroud)
它不会只是:
protocol someProtocol
{
let someProperty: String
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我需要两个设备(PC和微控制器)之间的简单通信协议.PC必须向微软发送一些命令和参数.微必须传输一个字节数组(来自传感器的数据).
数据必须受到噪声保护(除了奇偶校验,我认为我还需要一些其他的数据校正方法).
有没有标准的解决方案呢?(我只需要一个想法,而不是完整的解决方案).
PS任何建议表示赞赏.PPS对不起任何语法错误,希望你理解.
编辑1.我还没有决定它是主/从协议还是双方都可以发起通信.PC必须知道微工作何时完成工作并且可以发送数据.如果数据准备就绪,它可以连续轮询微观,或者当作业完成时微观可以发送数据.我不知道哪个更好更简单.
编辑2. 硬件和物理层协议.由于PC中使用RS-232 C串行标准,我将使用异步通信.我将只使用RxD,TxD和GND信号.我无法使用额外的电线,因为微控制器AFAIK不支持它们.顺便说一下,我正在使用AVR ATmega128芯片.
所以我将使用固定波特率,8位数据,2个停止位而不进行奇偶校验(或使用?).
有谁知道检查是否已实施可选协议方法的最佳方法.
我试过这个:
if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)] )
Run Code Online (Sandbox Code Playgroud)
代表是:
id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误,说respondsToSelector:该协议中找不到该功能!
a protocol和a有delegate什么区别?
和,
我们怎样才能声明variables中protocol class?
ObjectProperties.h
@protocol ObjectProperties <NSObject>
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSDate *date;
@property (assign, nonatomic) int64_t index;
@end
Run Code Online (Sandbox Code Playgroud)
ClassA.h
#import <Foundation/Foundation.h>
@protocol ObjectProperties;
@interface ClassA : NSObject <ObjectProperties>
- (void)specialSauce;
@end;
Run Code Online (Sandbox Code Playgroud)
ManagedClassA.h
#import <CoreData/CoreData.h>
@protocol ObjectProperties;
@interface ManagedClassA : NSManagedObject <ObjectProperties>
- (void)doSomething;
@end;
Run Code Online (Sandbox Code Playgroud)
从上面的代码示例中,我在.h文件中定义了一个协议,用于Core Data对象以及普通的'vanilla对象.似乎"噪音"使符合类#import协议在其标题中; 如上所示,在实现文件中转发声明协议和导入会更清晰.但是,当这样做时,Xcode会发出警告:
Cannot find protocol definition for 'ObjectProperties'
代码编译,主要是工作.我之所以说主要是因为Core Data试图动态创建标量属性的getter/setter有一些愚蠢,但我认为这可能是因为我遇到了边缘情况.
当然,最明显的解决方法是将协议头导入类头.
如果我的理解是正确的(我的知识是最近获得的,所以我完全有可能我错了),如果我将协议导入我的类头并对协议进行更改,那么导入我的所有后续文件必须重新编译类.
解决此类问题的正确方法是什么?
当我尝试以这种方式实现我的协议时:
protocol Serialization {
func init(key keyValue: String, jsonValue: String)
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说:函数声明中的预期标识符.
为什么我收到此错误?
如何在Windows中注册自定义协议,以便在单击电子邮件或网页中的链接时打开我的应用程序并将URL中的参数传递给它?
我经常听到"我们可以使用LDAP加载员工信息吗?" 然而,标题"轻量级目录访问协议"让我认为它是一个协议而不是像Oracle或MSSQL这样的物理数据库管理系统.
那么有人可以向我解释一下LDAP是什么,它是如何使用的,以及它是如何工作的?LDAP只是用于从各种DBMS中提取数据的标准协议吗?在架构图中,LDAP是否只是数据库和应用程序服务器之间的箭头?
我们是否有理由在链接属性中包含http/ httpsprotocol href?
如果不做就没关系了:
<a href="example.com">my site</a>
Run Code Online (Sandbox Code Playgroud) protocols ×10
objective-c ×4
delegates ×2
ios ×2
swift ×2
cocoa-touch ×1
database ×1
embedded ×1
html ×1
hyperlink ×1
iphone ×1
ldap ×1
serial-port ×1
url ×1
windows ×1