@protocol MyViewDelegate <NSObject>
- (void) didFinishProcessing:(MyView*)myView; //compiler stops here with error
@end
@interface MyView : MySuperclass {
id<MyViewDelegate> _delegate;
}
@property (nonatomic, retain) id<MyViewDelegate> delegate;
@end
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我会在MyView之前得到" 预期的").错误在哪里?
对象"发送消息"是什么意思?协议如何帮助对象宣传它支持的消息?有人有例子吗?
你对聊天室应用程序的xmpp协议有什么经验吗?不适用于信使IM.
我正在使用使用PC Link数据协议的万用表VA18B进行串行通信.问题是我找不到该协议的任何文档.我唯一得到的是一个解码帧的Perl脚本(据我所知,帧由14个字节组成).不幸的是,对于根本不了解Perl的人来说,脚本非常复杂.
有人可以解释下面的代码吗?
sub decode_bin_str { my ($AC, $DC, $auto, $unknown1, $minus, $digi1, $dot1, $digi2, $dot2, $digi3, $dot3, $digi4, $micro, $unknown2, $kilo, $diode_test, $milli, $percent, $mega, $cont_check, $unknown3, $ohm, $rel, $hold, $amp, $volt, $hz, $unknown4, $min, $unknown5, $celsius, $max) = shift =~ /^(.)(.)(.)(.)(.)(.{7})(.)(.{7})(.)(.{7})(.)(.{7}) (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) *$/x; my %digi = ( "1111101" => 0, "0000101" => 1, "1011011" => 2, "0011111" => 3, "0100111" => 4, "0111110" => 5, "1111110" => 6, "0010101" => 7, "1111111" => 8, "0111111" => 9, ); …
我有一个名为dateSelectViewController的方法在我的.h文件中声明为协议:
@class DateSelectViewController;
@protocol DateSelectViewControllerDelegate
- (void)dateSelectViewController:(DateSelectViewController *)sender
theDate:(id)stringDate;
@end
Run Code Online (Sandbox Code Playgroud)
在协议下面,我宣布一个代表:
@property (nonatomic, weak) id <DateSelectViewControllerDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
在实现文件中,我合成了委托,并在我的视图中按下完成按钮时向委托发送消息:
- (IBAction)DonePressed:(id)sender {
NSDate *chosen = [datePicker date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy"];
NSString *formatedDate = [formatter stringFromDate:chosen];
//sending a message to the delegate
[self.delegate dateSelectViewController:self theDate:formatedDate];
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
在被委派给的.h文件中,我正在导入委托人.h文件.在.m文件中我符合协议:
@interface MakePlantTVC ()<DateSelectViewControllerDelegate>
- (void)dateSelectViewController:(DateSelectViewController *)sender
theDate:(id)stringDate
{
self.displayDate.text = stringDate;
NSLog(@"delegate working");
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这一点正在发挥作用.当在我的委托者类中按下完成按钮时,该按钮会按预期执行并弹出视图控制器,但就像消息永远不会发送给代理一样.起初我以为我可以向nil发送消息,但是它的类型为id,所以情况应该不是这样.为什么没有发送消息?
最近我在CDN文档中看到过这些类型的URL:
//cloudflare.cdnjs.com/foo
Run Code Online (Sandbox Code Playgroud)
我意识到他们缺乏http:
或https:
在他们面前.
嗯,我想,并尝试在本地测试中实现它们,并意识到它们不起作用(它们已经解决//
了file://
,尽管应该是这样http:
).
然后,当我将其上传到我的测试服务器时,它工作(解决//
了http://
).
所以我想知道,为什么有人会在没有协议的情况下写它?
谢谢.
我有一个Printable对象数组,但我需要它们Equatable和AnyObject兼容.
private(set) var items: [Printable] = []
class func withItems<T: AnyObject where T: Equatable, T: Printable>(items: [T], selectedItem: T? = nil) {
... instance init ...
instance.items = items
}
Run Code Online (Sandbox Code Playgroud)
它导致EXC_BAD_INSTRUCTION:
致命错误:无法从Objective-C桥接数组
这是对这个问题的一次尝试:
为什么?
我有一个NSArray,其中所有对象都从相同的协议继承方法.我想做的是:
NSArray* arr = [NSArray arrayWithObjects:[Type_1 init],[Type_2 init], nil];
for(Protocol *element in arr)
{
[element do_this];
}
Run Code Online (Sandbox Code Playgroud)
arr是具有对象Type_1和Type_2的数组,它们都从名为Protocol的协议继承.
问题是协议不能用作for循环中的类型.我该如何解决这个问题?
在swift中使用@objc,我们可以在协议中创建一个可选方法
@objc protocol MyProtocol {
@objc optional func anOptionalMethod()
}
Run Code Online (Sandbox Code Playgroud)
但是如何在不使用@objc的情况下创建可选的协议方法?
protocols ×10
objective-c ×5
ios ×2
iphone ×2
swift ×2
chat ×1
cocoa ×1
cocoa-touch ×1
delegates ×1
for-in-loop ×1
html ×1
interface ×1
javascript ×1
methods ×1
optional ×1
perl ×1
types ×1
xmpp ×1