IOS开发学习-篇外Swift2常用语法-3

要不是swift的出现我永远都不会学习IOS开发,不过swift的一些基本用法还是需要动手写一写的。

//: Playground - noun: a place where people can play

import UIKit

var str = "Hello, playground"

var ary:Array<Int> = [10,2,3];

ary.sort(>)

for i in ary {
    print(i);
}

if !ary.isEmpty {
    print("array is empty.");
}

// 这里着重讲一下swift的 ? 和 !,这里你要了解一个swift类型 Optional ,好了那么直接说明
// vara 是String类型,而 varb 是Optional类型,在使用varb?的时候表示如果这个变量为空那
// 么接下来的方法就不执行,什么时候解包呢(就是!),如果你在使用这个值但是这个不能为Optional
// 的时候,下面有个例子就是,或者是你能确保有值,你也可以解包使用
var vara:String = "VARA"
var varb:String? = "1"
varb?.compare("a")
let intVarB:Int = Int(varb!)!
varb!.compare("1")
varb = nil

struct sts {
    init (n1:Int, n2:Int) {
        num1 = n1;
        num2 = n2;
    }

    var num1:Int
    var num2:Int
}

var stsObj = sts(n1:10, n2:20);
print(stsObj.num1)

//这里是为了演示 swift 中的循环引用问题 和 闭包循环引用问题,通常内存泄漏常见的问题,
//swift中使用弱引用来解决
class Girl {

    var by:Boy?

    init() {
        print("Girl init!")
    }

    deinit {
        print("Girl deinit...")
    }
}

class Boy {

    weak var gl:Girl?

    init() {
        print("Boy init!")
    }

    deinit {
        print("Boy deinit...")
    }
}


var gl:Girl? = Girl();
var by:Boy? = Boy();

gl!.by = by
by!.gl = gl

by = nil
gl = nil




class People {

    var name:String?

    lazy var age: ()->Int = {
        [unowned self] in
        self.name = "name"
        return 10;
    }

    init() {
        print("People init!")
    }

    deinit {
        print("People deinit...")
    }

    private static let str:String = "String..."

    class func getString()->String {
        return str
    }
}

var pp:People? = People()
print(pp!.age())
print(People.str)
print(People.getString())
pp = nil

//这是是定义一个函数类型的参数,最简单的回调方式
func callback(age:Int) -> Void {
    print("Callback age:\(age)")
}

func source(cb:(age:Int)->Void) -> Void {
    cb(age: 10)
}

source(callback)


//枚举的使用方式
enum Enum1 {
    case A
    case C,D,E
}

switch Enum1.C {
case Enum1.A:
    print("switch A")
case Enum1.C:
    print("switch C")
default:
    print("Default")
}

//扩展现有类的方法,还可以扩展协议,属性等
extension String {
    func toPrint() -> Void {
        print(self)
    }
}

let sss1 = "3"
sss1.toPrint();

//基本类型互转
let sss1Int = Int(sss1)

//最新的 swift 允许使用类和结构体来定义ErrorType,这里用的是枚举还是挺方便的
enum MyError : ErrorType {
    case NullPointerError
}

// swift 异常抛出方式
func getException() throws -> Void {
    throw MyError.NullPointerError
}

// swift 的异常处理,这里简单的做法
do {
    try getException()
} catch MyError.NullPointerError {
    print("MyError NullPointerError...")
}


// swift 协议定义方式,协议定义中属性必须指定一个get或者set
protocol SomeProtocol {
    var p1:Int {get}
    var p2:Int {get set}

    func getNumber1() -> Int
}

protocol AnotherProtocol {
    var int1:Int {get set}

    func getIntNum() -> Int

}

// swift 的类是不能多继承的,但是协议可以
// 协议定义的属性和方法必须全部实现这一点和Java很像
class ClassProtocol: SomeProtocol,AnotherProtocol {

    var p1: Int = 100
    var p2: Int = 200
    var int1: Int = 300


    func getIntNum() -> Int {
        return int1
    }

    func getNumber1() -> Int {
        return p2
    }
}



你可能感兴趣的:(swift)