//
// main.swift
// Swift_Other
//
// Created by 齐彦坤 on 2017/7/21.
// Copyright © 2017年 KG. All rights reserved.
//
// 2.3 与 3.0 迁移对比 http://www.jianshu.com/p/460b5424942a
import Foundation
// Swift 与 Objective-C 中的 nil
// Swift 使用 nil 代表 <#值缺失#>
// Swift 中 nil与 Objective-C 中的 nil 完全不同, 在 Objective-C 中, nil 代表一个并不次混在的指针对象, 而在 Swift 中并不代表指针而是一个确定的值-------他是一个确定的值, 用于代表"值缺失", 任何 <#可选类型#> 的变量都可以呗赋值为 nil, 如 Int?, Double? 等都可以接受 nil 值.
// can not recieve nil
// Var age: Int = nil
// Int? 类型的才可以接受 nil
// var age: Int? = nil
// var myName : String?
// print(myName ?? "")
var name_prefix = "123456"
var info = name_prefix + "789"
print(info)
name_prefix.removeAll(keepingCapacity: false) // storge and string -- > falses (released) / true (NoReleased)
var diamond : Character = "\u{2666}"
var heart : Character = "\u{2663}"
var club : Character = "\u{2665}"
var spade : Character = "\u{2660}"
print("\(diamond) \(heart) \(club) \(spade)") // ? ? ? ?
// \n -- \u{a}
// 7.6 属性观察者
// willSet(newValue): 被观察的属性即将被赋值之前自动调用该方法
// didSet(oldValue): 被观察的属性即将被赋值完成之后自动调用该方法
// 只要程序对非延迟存储的存储属性赋值 --- 即使所赋的值与原值相等, 属性观察者也能监听到
// 属性观察者监听的范围
// 1. 除了延迟属性之外的所有存储属性
// 2. 可以通过重载的方式为继承得到的属性添加属性观察者
// 3. 普通的属性添加属性观察者是没有意义的
/*
// 格式如下
[修饰符] var 存储属性名: 属性类型 [= 初始值]
{
willSet
{
// 属性即将赋值之前的代码
}
didSet
{
// 赋值完成之后的代码
}
}
*/
class Person
{
var name : String = ""
{
willSet
{
if (name as NSString).length > 6 || (name as NSString).length < 2
{
print("no")
}else{
print("yes")
}
}
didSet
{
print("didSetName: \(name)")
}
}
}
var p = Person()
p.name = "小黄人"
print("p.name = \(p.name)")
// 7.7.6 属性和方法的统一
// 全局函数
func factorial(n:Int) -> Int
{
var result = 1
for idx in 1...n {
result *= idx
}
return result
}
struct SomeStruct
{
// 将一个布闭包函数作为 info 存储属性的初始值
var info:() -> Void = {
print("info 方法")
}
// factorial全局函数作为 fact 存储属性的初始值
static var fact:(Int) -> Int = factorial
}
var sc = SomeStruct()
sc.info()
sc.info = {
print("另外一个闭包")
}
sc.info()
var n = 6
print("\(n)的阶乘: \(SomeStruct.fact(6))")
// 7.8 下标
/*
subscript(形参列表) -> 下表返回值
{
get
{
// getter 执行部分, 必须有返回值
&n