小编Alf*_*nso的帖子

如何在Kotlin中指定"自己的类型"作为返回类型

有没有办法将函数的返回类型指定为被调用对象的类型?

例如

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中的大致相同.

kotlin

13
推荐指数
4
解决办法
3386
查看次数

在Java中发生异常的情况下,为默认值分配最终变量

为什么在设置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)

问题并不难解决,但我想理解为什么编译器不接受这个.

提前感谢任何输入!

java final try-catch

8
推荐指数
1
解决办法
3147
查看次数

NSString compare:和isEqual(ToString)之间有区别吗?

偶尔我会找到测试两个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:NSOrderedSameisEqual:

objective-c nsstring

7
推荐指数
1
解决办法
4088
查看次数

使用单元测试测试增加的功能

我想知道在增加功能时,使用单元测试进行测试驱动开发/测试的最佳实践是什么.

例如,我有一个要求,当一个对象Class Foo收到一条bar()消息时,它应该相应地更新一个给定的字段counter.我为此创建了一个测试用例,它创建了一个Foo对象,然后测试了需求.

现在,如果有新要求,我应该怎么做,当Foo收到bar()消息时,另一个字段counter2应该更新.我应该为此创建一个新的测试用例,它仅检查第二个要求,还是只更新第一个测试用例?

tdd unit-testing

6
推荐指数
1
解决办法
107
查看次数

如何禁用自定义静态UITableViewCell的可访问性

我有一个包含UITableViewController静态内容的故事板.细胞非常简单,只包含一个细胞UILabel.如果我现在想要在其中一个单元格上禁用辅助功能,我只需取消选中标签上的标记即可.这按预期工作.

但是,如果我现在创建一个空子类UITableViewCell并将其用作静态单元格的单元格类,则将启用辅助功能,忽略所有设置.

我尝试覆盖-isAccessibilityElement返回NO,以编程方式将所有子视图accessibilityElement属性设置为NO,但在使用VoiceOver时仍可选择.VoiceOver不会读取内容,只有一个""似乎在那里(在此元素上向上/向下滑动时可以听到).

如何禁用自定义单元格的辅助功能?

uitableview ios voiceover uiaccessibility

4
推荐指数
2
解决办法
4910
查看次数

如何在删除之前等待重复的CAAnimation完成一个循环

我有一个观点,我让脉动使用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,但这会引发异常,因为动画是不可变的.

此外,我尝试从表示层获取当前值并将其应用于模型,然后删除动画并再次添加动画以完成它.但是这会在停止动画时产生明显的打嗝,并且通常也会关闭时间.

有没有办法让动画完成一个循环并在之后删除它?

core-animation caanimation ios

4
推荐指数
1
解决办法
2007
查看次数

使用运行时将弱ivar添加到Objective-C类

是否可以在使用运行时创建的类中添加归零弱引用(在ARC意义上,而不是GC中)实例变量?如果是这样的话?

有一个函数调用class_setWeakIvarLayout()似乎与此相关,但遗憾的是文档(对于此函数和非弱对应函数)都非常薄.

weak-references objective-c objective-c-runtime automatic-ref-counting

2
推荐指数
1
解决办法
1470
查看次数

捕获"自我"时,弱保留块如何导致保留周期

我有一个带有属性的类,它是对块的弱引用.

@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 objective-c-blocks automatic-ref-counting

1
推荐指数
1
解决办法
1509
查看次数