2019年6月19日 星期三

method


import UIKit
//習慣上class名稱第一個字母大謝,屬性名稱第一個字母小寫
class Counter{
    var count = 0;
    //實體的method,只有實體才可以執行
    func increment(){
        count += 1;
    }
    func increment(by amount:Int){
        count += amount;
    }
    func reset(){
        count = 0;
    }
}
let counter = Counter();
counter.increment();
print(counter.count);
counter.increment(by: 5);
print(counter.count);
counter.reset();
print(counter.count);

//使用self的時機
/*
struct Point{
    var x = 0.0, y = 0.0;
    func isToTheRightOf(x:Double) -> Bool {
        return self.x > x;
    }
}
let SomePoint = Point(x: 4.0, y: 5.0);
if SomePoint.isToTheRightOf(x: 1.0) {
    print("比較大!");
}
*/
/*
struct Point{
    var x = 0.0, y = 0.0;
    //method要去改變store property的值時,必須加上mutating
   mutating func moveBy(x deltaX:Double, y deltaY:Double){
        x += deltaX
        y += deltaY
    }
}
*/
struct Point{
    var x = 0.0, y = 0.0;
    mutating func moveBy(x deltaX:Double, y deltaY:Double){
        self = Point(x: x+deltaX, y: y+deltaY);
    }
}
var somePoint = Point(x: 1.0, y: 1.0);
somePoint.moveBy(x: 2.0, y: 3.0);

enum TriStatsSwitch{
    case off, low, heigh
    mutating func next(){
        switch self {
        case .off:
            self = .low;
        case .low:
            self = .heigh;
        case .heigh:
            self = .off;
        }
    }
}
var openLight = TriStatsSwitch.low;
openLight.next();

struct levelTracker{
    static var highestUnlockedLevel = 1;
    var currentLevel = 1;
    
    static func unlock(_ level:Int){
        if level > highestUnlockedLevel {
            highestUnlockedLevel = level;
        }
    }
}

2019年6月17日 星期一

property


import UIKit

struct FixedLengthRange{
    var firstValue:Int;
    let length:Int;
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
rangeOfThreeItems.firstValue = 6;

let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4);
//需內外都是var才可變更值
//rangeOfFourItems.firstValue = 6;

//lazy store property
class DataImporter{
    var filename = "data.txt"
}
class DataManager{
    lazy var importer = DataImporter();
    var data = [String]()
}
let manager = DataManager();
manager.data.append("Some Data");
manager.data.append("Some more data");
print(manager.importer.filename);

//computed property
struct Student{
    let name:String;
    var math:Int;
    var chinese:Int;
    var english:Int;
    //computed property語法,一定要給資料類型,每呼叫一次sum,就get math + chinese + english
    var sum:Int{
        get{
            return math + chinese + english
        }
    }
    //computed property語法,一定要給資料類型,每呼叫一次average就get Double(sum) / 3.0
    var average:Double{
        get{
            return Double(sum) / 3.0
        }
    }
}
var stu1 = Student(name: "Robert", math: 78, chinese: 67, english: 90);
print("stu1 的 sum 是:\(stu1.sum)");
print("stu1 的 average 是:\(stu1.average)");

//computed property,set
struct Point{
    var _x = 0;
    var _y = 0;
    var x:Int{
        get{
            print("取出x");
            return _x;
        }
        set(newV){
            print("存入值:\(newV)");
            _x = newV;
        }
    }
    var y:Int{
        get{
            print("取出y");
            return _y;
        }
        set(newV){
            print("存入值:\(newV)");
            _y = newV;
        }
    }
}
var point1 = Point(_x: 3, _y: 5);
print("\(point1.x)");
point1.x = 10;
print("\(point1.x)");

2019年6月16日 星期日

Class And Structrue


struct SomeStructure{
    
}

class SomeClass{
    
}

struct Resolution{
    //在struct內用var定義的稱為property
    var width = 0;
    var height = 0;
}
class VideoMode{
    var resolution = Resolution();
    var interlaced = false;
    var frameRate = 0.0;
    var name:String?;
}
//default初始化Resolution,width = 0,height = 0 
let someResolution = Resolution();
print(someResolution.width);
print(someResolution.height);

let someVideoMode = VideoMode();
someVideoMode.resolution.width = 1280
someVideoMode.resolution.height

let vga = Resolution(width: 640, height: 480)
vga.width;
vga.height;

let hd = Resolution(width: 1920, height: 1080);
var cinema = hd
cinema.width = 2048
hd.width

enum CompassPoiont{
    case north, south, east, west
    mutating func turnNorth(){
        self = .north;
    }
}
var currentDirection = CompassPoiont.west
//rememberedDirection = currentDirection = west
let rememberedDirection = currentDirection
currentDirection.turnNorth();

//rememberedDirection.turnNorth()會出錯!因為rememberedDirection設定為let,值不可改!
print(currentDirection);
print(rememberedDirection);

//referenct
let tenEighty = VideoMode();
tenEighty.resolution = hd;
tenEighty.interlaced = true;
tenEighty.name = "1080i";
tenEighty.frameRate = 25.0;

let alsoTenEighty = tenEighty;
alsoTenEighty.frameRate = 30.0;
print(tenEighty.frameRate);
//識別運算子
//===
//!===
//是不是指向同一個實體
if tenEighty === alsoTenEighty {
    print("遙控同一個實體!");
}