在Objective-C中,我们使用这样做
+ (Class)layerClass
{
return [CAEAGLLayer class];
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用:
CAEAGLLayer.class()
Run Code Online (Sandbox Code Playgroud)
因为class是Swift中的关键字.你是如何在Swift中做到的?
覆盖属性的didSet观察者会导致递归,为什么?
class TwiceInt {
var value:Int = 0 {
didSet {
value *= 2
}
}
}
class QuadInt : TwiceInt {
override var value:Int {
didSet {
value *= 4
}
}
}
let t = TwiceInt()
t.value = 5 // this works fine
let q = QuadInt()
q.value = 5 // this ends up in recursion
Run Code Online (Sandbox Code Playgroud)
如果我更新QuadInt与
class QuadInt : TwiceInt {
override var value:Int {
didSet {
super.value *= 4
}
}
}
q.value = …Run Code Online (Sandbox Code Playgroud) 当我创建一个unique_ptrwith时deleter,它可以工作:
std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr(new Animal<Cat>, [](Animal<Cat> *ls) {
delete ls;
});
Run Code Online (Sandbox Code Playgroud)
但是,这段代码抛出错误:
std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
ptr = std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)>(new Animal<Cat>, [](Animal<Cat> *ls) {
delete ls;
});
Run Code Online (Sandbox Code Playgroud)
错误:
/usr/bin/../lib/c++/v1/memory:2561:13: error: static_assert failed "unique_ptr constructed with null function pointer deleter"
static_assert(!is_pointer<deleter_type>::value,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: in instantiation of member function 'std::__1::unique_ptr<Animal<Cat>, void (*)(Animal<Cat> *)>::unique_ptr' requested here
std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
^
Run Code Online (Sandbox Code Playgroud)
这是我的编译器版本:
Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin12.4.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)
动物和猫类是微不足道的.这是整个代码.
代码:
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
Apple的文档明确指出:
返回值:即使指定了整数返回类型,此函数也不会返回.当用户通过按Home键终止iPhone应用程序时,应用程序会立即通过调用退出系统函数退出,参数为零.
其次,
int UIApplicationMain (
int argc,
char *argv[],
NSString *principalClassName,
NSString *delegateClassName
);
我们如何从UIApplication子类访问argv?