 //let string = "abc"
 //if string is String { print("is string") } // 警告：'is' test is always true
 
-
+*/
 
 // -----------------------------
 

 因此在绝大多数情况下，我们使用的 Swift 类型都应该是在编译期间就确定的。
 如果在你写的代码中经常需要检查和确定 AnyObject 到底是什么类的话，几乎就意味着你的代码设计出了问题”
 
 
 
*/

class ClassA: NSObject { }

print("Hello, World!")


// -----------------------------


// KeyPath 和 KVO

/*
 “KVO 的目的并不是为当前类的属性提供一个钩子方法，而是为了其他不同实例对当前的某个属性 (严格来说是 keypath)
 进行监听时使用的。其他实例可以充当一个订阅者的角色，当被监听的属性发生变化时，订阅者将得到通知。”
 “像通过监听 model 的值来自动更新 UI 的绑定这样的工作，基本都是基于 KVO 来完成的。”
 
 “在 Swift 中我们也是可以使用 KVO 的，不过 KVO 仅限于在 NSObject 的子类中，因为 KVO 是基于 KVC (Key-Value Coding)
 以及动态派发技术实现的，而这些东西都是 OC 运行时的概念。另外由于 Swift 为了效率，默认禁用了动态派发，
 因此想用 Swift 来实现 KVO，我们还需要做额外的工作，那就是将想要观测的对象标记为 dynamic 和 @objc。”
 
 
 
 */


// -----------------------------

/*

//自省
/*
