有没有办法将函数的返回类型指定为被调用对象的类型?
例如
trait Foo {
fun bar(): <??> /* what to put here? */ {
return this
}
}
class FooClassA : Foo {
fun a() {}
}
class FooClassB : Foo {
fun b() {}
}
// this is the desired effect:
val a = FooClassA().bar() // should be of type FooClassA
a.a() // so this would work
val b = FooClassB().bar() // should be of type FooClassB
b.b() // so this would work
Run Code Online (Sandbox Code Playgroud)
实际上,这与instancetypeObjective-C或SelfSwift中的大致相同.
为什么在设置try块中的值之后,Java不允许我为catch块中的最终变量赋值,即使在异常情况下不能写入最终值也是如此.
这是一个演示问题的示例:
public class FooBar {
private final int foo;
private FooBar() {
try {
int x = bla();
foo = x; // In case of an exception this line is never reached
} catch (Exception ex) {
foo = 0; // But the compiler complains
// that foo might have been initialized
}
}
private int bla() { // You can use any of the lines below, neither works
// throw new RuntimeException();
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
问题并不难解决,但我想理解为什么编译器不接受这个.
提前感谢任何输入!
偶尔我会找到测试两个NSStrings是否相同的代码:
if ([str1 compare:str2] == NSOrderedSame) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
现在,我相信这比使用isEqualToString:它更不易读,它也有一些令人讨厌的副作用,比如如果str1 == nilif(..)评估为true,或者str2 == nil根据Apple文档可能会破坏我们.(编辑:正如hatfinch指出的那样,如果str1 == nil && str2 == nil两种变体都产生了错误的结果.那么无论如何你都需要防范这种情况).
但在我讨论公司代码中的那些陈述之前,我想确保我没有错过一些重要的观点.
所以我的问题基本上可以归结为:是否有任何区别compare:来NSOrderedSame和isEqual:?
我想知道在增加功能时,使用单元测试进行测试驱动开发/测试的最佳实践是什么.
例如,我有一个要求,当一个对象Class Foo收到一条bar()消息时,它应该相应地更新一个给定的字段counter.我为此创建了一个测试用例,它创建了一个Foo对象,然后测试了需求.
现在,如果有新要求,我应该怎么做,当Foo收到bar()消息时,另一个字段counter2应该更新.我应该为此创建一个新的测试用例,它仅检查第二个要求,还是只更新第一个测试用例?
我有一个包含UITableViewController静态内容的故事板.细胞非常简单,只包含一个细胞UILabel.如果我现在想要在其中一个单元格上禁用辅助功能,我只需取消选中标签上的标记即可.这按预期工作.
但是,如果我现在创建一个空子类UITableViewCell并将其用作静态单元格的单元格类,则将启用辅助功能,忽略所有设置.
我尝试覆盖-isAccessibilityElement返回NO,以编程方式将所有子视图accessibilityElement属性设置为NO,但在使用VoiceOver时仍可选择.VoiceOver不会读取内容,只有一个""似乎在那里(在此元素上向上/向下滑动时可以听到).
如何禁用自定义单元格的辅助功能?
我有一个观点,我让脉动使用CAAnimation.
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
animation.values = @[ @0.0f, @1.0f, @0.0f ];
animation.duration = 0.5;
animation.repeatCount = HUGE_VALF;
[view.layer addAnimation:animation forKey:@"pulsate"];
Run Code Online (Sandbox Code Playgroud)
当我使用[view.layer removeAnimationForKey:@"pulsate"]不透明度移除动画时立即捕捉.我想要实现的是当前正在执行的脉动动画完成然后移除动画.
我尝试设置repeatCount为1,但这会引发异常,因为动画是不可变的.
此外,我尝试从表示层获取当前值并将其应用于模型,然后删除动画并再次添加动画以完成它.但是这会在停止动画时产生明显的打嗝,并且通常也会关闭时间.
有没有办法让动画完成一个循环并在之后删除它?
是否可以在使用运行时创建的类中添加归零弱引用(在ARC意义上,而不是GC中)实例变量?如果是这样的话?
有一个函数调用class_setWeakIvarLayout()似乎与此相关,但遗憾的是文档(对于此函数和非弱对应函数)都非常薄.
weak-references objective-c objective-c-runtime automatic-ref-counting
我有一个带有属性的类,它是对块的弱引用.
@interface BlockTest : NSObject
@property (nonatomic, weak) void(^testBlock)();
@end
Run Code Online (Sandbox Code Playgroud)
在课程的另一点我使用这个块像这样:
- (void)foobar {
self.testBlock = ^{
[self doSomething];
};
}
Run Code Online (Sandbox Code Playgroud)
编译器(Apple LLVM 3.0)抱怨可能存在保留周期,因为self这里强烈捕获.但我没有看到它如何导致保留周期,因为块本身是一个__weak参考,所以应该没问题.如果我正确理解了ARC弱引用,那么当-foobar方法返回时,传递给的块self.testBlock应该被释放(如果没有保存在其他地方),因此也会释放self.
编译器仍然认为可能存在保留周期的原因是什么?
objective-c ×3
ios ×2
caanimation ×1
final ×1
java ×1
kotlin ×1
nsstring ×1
tdd ×1
try-catch ×1
uitableview ×1
unit-testing ×1
voiceover ×1