编辑代码

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. 了解下标语法即可。

*/