我有一系列符合特定协议的类.例如:
@protocol Consumable
@end
Run Code Online (Sandbox Code Playgroud)
以及几个班级之一:
@interface LivingEntity : Entity<Consumable>
...
Run Code Online (Sandbox Code Playgroud)
在应用程序的其他部分,我检查对象是否conformsToProtocol,并使用以下方法投射它们:
id<Consumable> consumable = (id<Consumable>) something;
Run Code Online (Sandbox Code Playgroud)
问题是,consumable然后交给几种方法.如果consumable是LivingEntity类的实例,则其中一个需要额外的逻辑.
但是,没有办法检查是否[consumable class] == [LivingEntity class].
我怎样才能检查它是哪一堂课?似乎协议强制转换阻止我使用NSObject方法.
我只需要跟踪keyup产生字符的按键事件。我需要keyup(跟踪所有键)over keypress(仅跟踪产生字符的键)的原因是因为我的逻辑必须在字符出现在 DOM 中之后运行。
我的逻辑在添加到contenteditable(TinyMCE) 时对内容进行样式设置,但我无法执行此操作keypress,因为内容实际上尚未添加。
MDN 文档keyup提到了该char属性,这听起来像是我想要的,但至少在 Chrome 中,它始终是undefined.
我需要支持 IE10+、现代 Chrome/Firefox,如果这很重要的话。
我一直在使用git已经有一段时间了解提交是如何工作的,标签等等.我真的很喜欢在使用git tag -a 1.0.0之后能够看到递增的修订版号,但是有一些问题:
我的目标如下:
我最大的问题是,当将代码推送到服务器时,SHA1提交ID不会向用户提供任何按时间顺序的指示.我愿意使用第三方工具来计算分支机构中的修订数量等等.
有任何想法吗?
我使用CCLabel添加了一个标签到我的图层.现在我希望它在一段时间后消失(如2秒).我怎么能让它消失?
CCLabel *labelPerfectDraw = [CCLabel labelWithString:@"Perfect Draw" fontName:@"Marker Felt" fontSize:30 ];
labelPerfectDraw.color = ccc3(0x00, 0x00, 0xff);
labelPerfectDraw.position = ccp(windowSize.width/2, windowSize.height/2+80);
[self addChild:labelPerfectDraw];
Run Code Online (Sandbox Code Playgroud)
我以上面的方式添加了标签.请告诉我如何处理它?
制作一个生物可以与他人一起复制的游戏.我已经定义了一个协议,以便某些生物可以繁殖.
但是,我似乎无法弄清楚如何正确施放和传递生物
// Creature may breed with any other creature allowed to breed
@protocol Mateable
-(void)mateWith:(id<Mateable> *)entity;
@end
Run Code Online (Sandbox Code Playgroud)
当玩家触摸一个生物时,我有逻辑施放该生物并传递它:
// If user taps on a create that can breed, we make it happen...
if( [touching conformsToProtocol:@protocol(Mateable)] ){
id<Mateable> mate = (id<Mateable>) touching;
[player mateWith:mate];
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
Cannot initialize the parameter of type '__autorelease <id>Mateable' with an lvalue of type '__strong id<Mateable>'
我怎样才能正确地施放并传递生物作为参数?
我是一个团队的几个git存储库的经理,经常遇到这个问题.当他们应该创建一个功能分支时,另一个团队成员意外地在master或staging分支上提交他们的工作.
那些提交还没有准备好被推送,所以我被卡住了.我知道如何在创建一个新分支后重置当前分支,但是当事物全部通过远程仓库推送时,它无法正常工作.
我需要一种方法将最后一个x号提交从分支A移动到新分支B,从分支A中删除这些提交(以允许我安全地推回到远程仓库的方式).当分支B完成时,我需要能够将它合并回分支A.
我已经找到了大量的建议,但是没有一个能够在已经推送的提交中正常工作.
我正在包装一个使用泛型的方法,但我不知道如何正确传递泛型.
我有一个FindAsset方法应该接受一般类型,就像它LoadAsset一样.
public T FindAsset<T>(string assetName) {
T match;
foreach (AssetBundle bundle in assets) {
if (bundle.Contains(assetName)) {
match = bundle.LoadAsset<???>(assetName);
}
}
return match;
}
Run Code Online (Sandbox Code Playgroud)
我只是不确定如何正确传递泛型类型LoadAsset.该方法还有一个签名,它接受一个Type参数作为参数,但在那种情况下,我看不到正确转换对象的方法.
我希望这个用法可以简单 myclass.FindAsset<Sprite>(assetName);
git ×2
ios ×2
objective-c ×2
c# ×1
cocoa-touch ×1
deployment ×1
generics ×1
html ×1
javascript ×1