import Foundation
/*
1. 请问以下代码,使用Swift如何编写?(提示:使用lazy关键字)
@interface TestClass : NSObject
@property (nonatomic, assign) NSInteger aIntValue;
@end
@implementation TestClass
@end
@interface TestLazyLoadClass : NSObject
@property (nonatomic, strong) TestClass *aTestClass;
@end
@implementation TestLazyLoadClass
- (TestClass *)aTestClass {
if (_aTestClass == nil) {
_aTestClass = [[TestClass alloc] init];
_aTestClass.aIntValue = 10; //注意初始值
}
return _aTestClass;
}
@end
*/
struct TestClass {
var aIntValue: Int
}
struct TestLazyLoadClass {
lazy var aTestClass: TestClass = TestClass(aIntValue: 10)
}
var a1 = TestLazyLoadClass()
print(a1.aTestClass.aIntValue)
/*
2. 请问以下代码会输出什么,为什么?
class TestClass {
var intValue = 0 {
willSet {
print("call willSet")
}
didSet {
print("call didSet")
}
}
init() {
self.intValue = 10
}
}
let aClass = TestClass()
print(aClass.intValue)
*/
/*
只输出10
在父类初始化方法调用之后,子类对属性赋值会调用父类的属性观察器
子类初始化方法调用之前,对子类属性赋值不会调用子类的属性观察器
换而言之,每个类的属性观察器只有再其初始化方法调用之后才会生效
因此这道题目,只会输出10,始终没有触发属性观察器
*/
/*
3. 了解属性包装器即可。
*/
@propertyWrapper
struct EvenNumber {
private var number: Int
init() { self.number = 0 }
var wrappedValue: Int {
get { return number }
set { number = newValue - newValue % 2 }
}
}
struct Human {
@EvenNumber var chromosomeCount: Int
}
var levi = Human()
levi.chromosomeCount = 46
var caffrey = Human()
// 很不幸!少了个y染色体
caffrey.chromosomeCount = 45
print(levi.chromosomeCount)
print(caffrey.chromosomeCount)
/*
4. Swift怎么写一个单例?
*/
/*
5. Swift函数定义中,用static和class修饰有什么区别?
*/
/*
6. 对于OC中@property的copy、atomic、readonly关键字,Swift如何实现?
*/
/*
7. 了解下标语法即可。
*/