Swift基础语法汇总

来源:互联网 发布:mac电影下载软件 编辑:程序博客网 时间:2024/05/04 07:32

// Playground - noun: a place where people can playimport UIKitvar str = "Hello, playground"var (a, b) = (10, 29)let (c:String, d:Int) = ("10", 19)println(a + b)a = 1;var array = [1, 2, 3, 4];println(array[2]);var dict: [String: Int] = [    "a": 1,    "b": 2,    "c": 3,    "d": 4,    "e": 5];dict["c"]//可变类型var dict11 = [    "a": 1,    "b": "2"]dict11["a"]dict11["b"]var intList: [Int] = []var dict1 =[    "a": 0,    "b": 1,    "c": 2];dict1["a"]//println("\(dict1["a"])");//特殊的组合let lang2: (String, Int, Int) = ("Swift", 0, 1);lang2.0lang2.1lang2.2//可以为特殊组合定义名称let lang1: (name:String, age:Int) = (name:"a", age:0);lang1.namelet length = -6if(length > 0){    println(1);}else if(length > 1){    println(2);}else if length < 1 {    println(-1);}for i in array{    println(i)}//Null型??var strValue: String?println(strValue)var strValueOptional: Optional<Int>if strValue != nil {    println(0)}else{    println(1)}var myVar = 0;println(" (myVar) ");println("Hello, World!")var array1 = [1,2,3,4,5]for i in array1{    println(i)}var myVar1 = 0;println("my var is myVar)" + String(myVar1));println("my var is ¥(myVar)");var my : Int = 0;println(my);var myVar3 : Double = 3.21123123println(myVar3);var movieCount = 0var songCount = 0println("Media library contains \(movieCount) movies and \(songCount) songs");println("国")//基本控制语句var score = 50;var scoreArray = [90, 100, 23, 43, 43, 67];for s in scoreArray {    println("s is \(s)");}var maxScore = 0;var minScore = 0;var avgScore = 0.0;var sumScore = 0.0;var count = scoreArray.count;for s in scoreArray{    sumScore += Double(s);}println("sumScore is \(sumScore)");for (var i = 0; i < count; i++){    println(scoreArray[i]);}var index = 0;while(index < count){    var s = scoreArray[index];    index++;    println(" while is [\(s)]");}let type = "IOS"//Swift不是穿透型,[fallthrough]可以设定穿透switch type {case "IOS":    println("");case "IOS1":    println("");    fallthroughdefault:    break;}///方法的使用func testConcat(v1:String, v2:String) -> String {    return "\(v1) and \(v2)";}func testConcat2(v1:String, p2 v2:String, p3 v3:String) -> String {    return "\(v1) and \(v2) and \(v3)";}func getInfo() -> (String, String, String){    return ("syu", "gen", "syou")}func testFunctionInFunction() -> Int {        //基本上和JS是一致的    var y = 10;        func add(){        y += 5;    }        add();        return y;}func Function() -> String {    return "OK!";}func addFuc(num : Int) -> Int {    return num ;}func Function(v1 : Int) -> (Int -> String) {    func addFuc(num : Int) -> String {        var a = num + 1;        return "result is \(a)";    }    return addFuc;}func lessThanTen(number: Int) -> Bool {    return number < 10;}func hasAnyMatch(list: [Int], condition: (Int -> Bool)) -> Bool {    for item in list {        if condition(item) {            return true;        }        continue;    }        return false;}func testFuction(){    println("My First Fuc");        let v = testConcat("hello", "world");    println("v is \(v)");        let v2 = testConcat2("syu", p2: "gen", p3: "syou");    println("v2 is \(v2)");        let (v3, v4, v5) = getInfo();    println("\(v4)");            let v6 = testFunctionInFunction();    println("\(v6)");        //方法指针    var myFunc = Function(1);    let v7 = myFunc(1);    println("\(v7)");        var arr = [10, 20, 30, 5];    let v8 = hasAnyMatch(arr, lessThanTen);    println("\(v8)");}testFuction();//数据结构var p1 = 100;let p2 = "value is " + String(p1);println("p2 is \(p2)");var p3 = ["IOS", "Android", "winPhone", "Symbian"];p3[0] = "IOS/Swift";for i in p3 {    println("new i is \(i)");}p3.append("BlackBerray");// 字典型的使用var p4 : Dictionary = [    "Name": "zyx",    "Age": 35,    "Score": "100"]for(key, value) in p4{    println("key value \(key) and \(value)");}p4["Course"] = "100";for(key, value) in p4{    println("key value \(key) and \(value)");}let p5 = p4.keys;for key in p5{    println("key is \(key)");}//Closure 闭包= 类似于Net的拉姆达表达式 简化代码写法var arr = [20, 9, 100, 34, 89, 39];func hasClosureMatch(arr: [Int], compareValue: Int, cb:(num: Int, value: Int) -> Bool) -> Bool{    for item in arr {        if (cb(num: item, value: compareValue)) {            return true;        }            }    return false;}var v1 = hasClosureMatch(arr, 400, {    (num: Int, value: Int) -> Bool in    return num >= 400;});println("v1 is \(v1)");var v3 = hasClosureMatch(arr, 5, {    //sh Coding经常食用方法    return $0 < $1});println("v3 is \(v3)");let v4  = hasClosureMatch(arr,9, {    return $1 == 9});println("v4 is \(v4)");//闭包函数特性整理array = [20, 9, 100, 34, 89, 39]func canMatch(arr: [Int], compareValue: Int, cb: (num: Int, value: Int) -> Bool) -> Bool {        for item in arr {        if (cb(num: item, value: compareValue)) {            return true        }    }        return false}//Fn1var compareFn1 = {    (num: Int, value: Int) -> Bool in    return num == value;}var val1 = canMatch(array, 100, compareFn1);println("\(val1)")//Fn2var val2 = canMatch(array, 100, { return $0 == $1 });println("\(val2)")//构造体struct QFTest {    var x = 0;    var y = 0;        //构造函数固定名称    init(){        NSLog("init called");    }        init(x:Int, y:Int){        self.x = x;        self.y = y;                NSLog("init with params is called");    }        //特殊语法,如果再调用构造函数的时候想使用一般语法的参数传递「QFTest(100, 200)」 ,必须自己重写下面的代码    init(_ x: Int, _ y: Int){        self.x = 0;        self.y = 0;    }        //结构体没有析构函数        //可以定义函数    mutating func add(v1: Int, v2: Int){        //结构体是一个对象的拷贝,其成员变量的值在定义的时候初始化        //默认在构造体内是不能改变成员变量的,如果想改变需要在函数前加上mutating                x += v1;        y += v2;    }    }struct dog {    var age = 0;}func testStructure() {        //构造体初期化    var s = QFTest(x:100, y:200);        printlnForStructure(s);        var s1 = QFTest();    s1.x = 100;    s1.y = 200;        printlnForStructure(s1);            var s2 = QFTest(100, 200);    printlnForStructure(s2);        s2.add(300, v2:300);    printlnForStructure(s2);    }func printlnForStructure(p: QFTest){    println("x: \(p.x) and y: \(p.y)");}testStructure();//クラスclass Person {    //Swift 变量类型    var age :Int = 0;    var name :String?;        init() {        self.age = 5;        self.name = "x man";    }        init(name:String, age:Int){        self.age = age;        self.name = name;    }        //两种方法类型    //1、成员方法:通过类的实例化对象调用    func getAge() -> Int {        return age;    }        func getName() -> String {        //! => nil(Null)可以理解是一种装箱操作        return name!;    }        //2、类方法、相当于静态方法    class func  MaxAge() -> Int {        return 200;    }        //3. 不经常使用,返回类型本身    class func person() -> Person {        return Person();    }        //析構函数    deinit {            }}var xiaoming = Person();println("xiaoming is \(xiaoming.age)");var maxAge = Person.MaxAge();println("Max age is \(maxAge)");//参数标签的区别://一般情况下方法的第一个参数的标签,在调用的时候是不需要明确写出来的.但是如果参数带有#符号则必须写//构造函数的参数标签是必须写的var xiaoli = Person(name: "王さん", age: 32);//Setter Getterstruct  Point {    var x = 0.0, y = 0.0;};struct Size {    var width = 0.0, height = 0.0;}struct  Rect {    //在定义类和构造体的时候可以想下面这行这样用一种懒加载的方式定义变量,可以使变量只有在被使用的时候才加载    //@lazy var aysnObj = Point();        var origin = Point();        var size = Size();        //Center相当于C#的属性成员    var center : Point {        get {            let x = origin.x + (size.width / 2);            let y = origin.y + (size.height / 2);            return Point(x :x, y :y);        }                set(newCenter) {            origin.x = newCenter.x - size.width/2;            origin.y = newCenter.y - size.height/2;                    }    }            func getCenter() -> (Double, Double) {        let x = origin.x + (size.width / 2);        let y = origin.y + (size.height / 2);                return (x, y);    }}var rect = Rect(origin :Point(x:100, y:200), size :Size(width: 400, height: 50));var (x, y) = rect.getCenter();println("x y =(\(x), \(y) )")var p11 :Point = rect.center;println("x y =(\(p11.x), \(p11.y) )")var p13 = Point(x:200, y:400);rect.center = p13;println("x y =(\(p13.x), \(p13.y) )")var rect1 = Rect(origin: Point(x:200, y:500), size: Size(width: 300, height: 100));class Human {        var x = 0    var y = 0    var w = 0    var h = 0        init() {            }        init(x: Int, y: Int, w: Int, h: Int){        self.x = x        self.y = y        self.w = w        self.h = h    }        var position: (x: Int, y: Int){                //返回值必须和「(x: Int, y: Int)」属性定义一致        get {            return (x, y)        }                //set的参数也必须和 「(x: Int, y: Int)」属性定义一致        set(pos) {            self.x = pos.x            self.y = pos.y        }    }        class func Summay() -> String {        return "human"    }}var person = Human()person.positionperson.position = (9, 9)Human.Summay()/* 属性的各种情况 */class HumanNew {        var fristName: String = ""        var milldeName: String?        var lastName: String = ""        //属性的参数列表带nil值的情况    var Name: (frist: String, millde: String?, last: String) {                get {            return (fristName, milldeName, lastName)        }                set(fullName) {            self.fristName = fullName.frist            self.milldeName = fullName.millde            self.lastName = fullName.last        }            }        func toString() -> String {        return lastName + " " + (milldeName ?? "XX") + fristName    }        //nil属性    var _company = ""    //只有一个属性的时候    var company: (String?) {        get {            return _company + "株式会社"        }                set (companyName) {            self._company = companyName!        }    }}var xiaowang = HumanNew()xiaowang.Name = ("xiao", nil, "wang")println(xiaowang.toString())//Interface//多継承可能@objc protocol SortProtocol : NSObjectProtocol {        //必须实现的方法    func compare (value:Int) -> Bool;            //如果有用了optional的方法,则Class的前面必须追加@objc。这个方法是可选的。可以不实现    optional func beginCompare() -> Bool;    }protocol SortProtocol1 : NSObjectProtocol {        func findMaxValue (v1:Int, v2:Int) -> Bool;        }class ClassA : NSObject, SortProtocol, SortProtocol1 {    var age = 0;    init(age:Int) {        self.age = age;    }        func compare(value: Int) -> Bool {        return true;    }        func findMaxValue(v1: Int, v2: Int) -> Bool {        if(v1 > v2){            return true;        }else{            return false;        }    }    }let classA = ClassA(age:100);let ret = classA.compare(200);let result = classA.findMaxValue(200, v2: 300);println(result);//強制类型转换let newClassA = classA as SortProtocol1;println(newClassA.findMaxValue(500, v2: 300));let newClassB = classA as SortProtocol;//这是在调用一个没有被实现的的方法。该方法没有被实现的时候,可以返回nilprintln(newClassB.beginCompare?());//可简化的循环写法for i in 1...11 {    println(i)}func add(heigth: Int, #width: Int) -> Int {    return heigth + width}add(100, width: 200)let number = 10switch number {    case 2, 4, 6, 7, 10:        println("2")        //可穿透        fallthrough    case 10:        println("10")    case 1, 3, 5, 7:        println("3")    default:        println()}


0 0
原创粉丝点击