2019年6月26日 星期三

inheritance


import UIKit

class Vehicle {
    var currentSpeed = 0.0;
    //每呼叫一次就會被執行一次
    var description:String {
        return "現在的速度是每小時\(currentSpeed)";
    }
    func makeNoice() {
        //發出聲音
        
    }
}
//Bicycle 繼承 Vehicle
class Bicycle:Vehicle{
    var hasBasket = false;
}

let someVehicle = Vehicle();
let bicycle = Bicycle();
bicycle.currentSpeed = 15.0;
print("Bicycle:\(bicycle.description)");

class Tandem:Bicycle {
    var currentNumberOfPassengers = 0;
}
let tandem = Tandem();
tandem.hasBasket = true;
tandem.currentNumberOfPassengers = 2;
tandem.currentSpeed = 22.0;
//override
//Train 繼承 Vehicle,override method
class Train:Vehicle {
    override func makeNoice() {
        print("Choo Choo");
    }
}
let train = Train();
train.makeNoice();
//Car 繼承 Vehicle,override computed property
class Car:Vehicle{
    var gear = 1;
    override var description: String {
//        return "現在的速度是每小時\(currentSpeed)公里," + "目前是\(gear)檔";
        return super.description + ",目前是\(gear)檔";
    }
}
let car = Car();
car.currentSpeed = 25.0;
car.gear = 3;
print("Car:\(car.description)");
//override property with observer
class AutomaticCar:Car {
    override var currentSpeed: Double{
        didSet{
            gear = Int(currentSpeed / 10.0) + 1
        }
    }
}
let automatic = AutomaticCar();
automatic.currentSpeed = 35.0;
print("automaticCar.\(automatic.description)");

Nginx限速

編輯站台設定檔,在Server區段內增加如下設定:
limit_rate 1024k;

重新啟動nginx

apache 限速

啟用mod_bw模組,並編輯mod_bw.conf,加入如下設定:
BandWidth    all 2621440

重新啟動apache

2019年6月23日 星期日

subscript


import UIKit
//subscript 快速存取實體的資料
/*語法:
 subscript(index:Int) -> Int{
    get{
        return Int;
    }

    set(newValue){

    }
 }

*/
struct TimesTable{
    let multiplier:Int;
    subscript(index:Int) -> Int{
        //只有get時,可以省略get語法
        return index * multiplier;
    }
}
let threeTimesTable = TimesTable(multiplier: 3);
print("6次的3是:\(threeTimesTable[6])");

var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4];
//如果沒指定的key,就是新增
numberOfLegs["bird"] = 2;

struct Matrix{
    let rows:Int, columns:Int;
    var grid:[Double];
    
    init(rows:Int, columns:Int){
        self.rows = rows;
        self.columns = columns;
        grid = Array(repeating: 0.0, count: rows * columns);
    }
    func indexIsValid(row:Int, column:Int) -> Bool{
        return row >= 0 && row < rows && column >= 0 && column < columns;
    }
    subscript(row:Int, column:Int) -> Double{
        get{
            assert(indexIsValid(row: row, column: column),"Index out of range")
            return grid[(row * columns) + column]
        }
        
        set{
            assert(indexIsValid(row: row, column: column),"Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}
var matrix = Matrix(rows: 2, columns: 3)
matrix[1,2] = 50.0
matrix[1,1] = 40.0
matrix[0,0] = 10.0
print(matrix.grid)
//print(matrix[20,20])
print(matrix[1,2]);
print(matrix[1,1]);
print(matrix[0,0]);