第三周第三天

第三周第三天

class Point {
    var x: Double
    var y: Double
    
    // 我們可以在一個(gè)類中定義多個(gè)初始化方法
    
    // 便利初始化方法 / 便利構(gòu)造器
    // 調(diào)用了其他的初始化方法的初始化方法
    convenience init() {
        self.init(x: 0, y: 0)
    }
    
    convenience init(point: (Double, Double)) {
        self.init(x: point.0, y: point.1)
    }
    
    // 指派初始化方法 / 指派構(gòu)造器
    // 被其他初始化方法調(diào)用的初始化方法
    init(x: Double, y: Double) {
        self.x = x
        self.y = y
    }
    
    func distanceTo(other: Point) -> Double {
        let dx = x - other.x
        let dy = y - other.y
        return sqrt(dx * dx + dy * dy)
    }
    
    func moveTo(x: Double, _ y: Double) {
        self.x = x
        self.y = y
    }
    
    func moveBy(dx: Double, _ dy: Double) {
        x += dx
        y += dy
    }
}

調(diào)用

//三種初始化方法,都可以使用
let p1 = Point()
let p2 = Point(x: 3, y: 4)
let p3 = Point(point: (-3.5, 6.7))

// 0. 發(fā)現(xiàn)類
//  - 在對(duì)問(wèn)題的描述中找名詞和動(dòng)詞
//  - 名詞會(huì)成為類或者類中的屬性 動(dòng)詞會(huì)成為類中的方法

// 1. 定義類
//  - 數(shù)據(jù)抽象(屬性)
//  - 行為抽象(方法)
//  - 初始化方法

// 訪問(wèn)修飾符
//  - public (公開(kāi))
//  - internal (內(nèi)部的) - 默認(rèn)
//  - private (私有)
class Circle {
    // stored property
    // 存儲(chǔ)屬性(保存和圓相關(guān)的數(shù)據(jù)的屬性)
    var center: Point
    var radius: Double
    
    init(center: Point, radius: Double) {
        self.center = center
        self.radius = radius
    }
    
    // 通常獲得某個(gè)計(jì)算出的值的方法都可以設(shè)計(jì)成計(jì)算屬性
    // computational property
    // 計(jì)算屬性(通過(guò)對(duì)存儲(chǔ)屬性做運(yùn)算得到的屬性)
    var perimeter: Double {
        // 圓的周長(zhǎng)是一個(gè)只讀屬性
        // 所以此處只有g(shù)et{}沒(méi)有set{}
        get { return 2 * M_PI * radius }
    }
    
    var area: Double {
        get { return M_PI * radius * radius }
    }
}

奧特曼的類里面有屬性的保護(hù)和調(diào)用

func randomInt(min: UInt32, _ max: UInt32) -> Int {
    return Int(arc4random_uniform(max - min + 1) + min)
}

class Ultraman {
    private var _name: String
    private var _hp: Int
    private var _mp: Int
    
    var isAlive: Bool {
        get { return _hp > 0 }
    }
    
    var name: String {
        get { return _name }
    }
    
    var hp: Int {
        get { return _hp }
        set { _hp = newValue > 0 ? newValue : 0 }
    }
    
    var mp: Int {
        get { return _mp }
    }
    
    init(name: String, hp: Int, mp: Int) {
        _name = name
        _hp = hp
        _mp = mp
    }
    
    func attack(monster: Monster) {
        let injury = randomInt(15, 20)
        monster.hp -= injury
    }
    
    func hugeAttack(monster: Monster) {
        
    }
    
    func magicalAttack(monsters: [Monster]) {
        
    }
}

小怪獸的類

class Monster {
    private var _name: String
    private var _hp: Int
    
    var isAlive: Bool {
        get { return _hp > 0 }
    }
    
    var name: String {
        get { return _name }
    }
    
    var hp: Int {
        get { return _hp }
        set { _hp = newValue > 0 ? newValue : 0 }
    }
    
    init(name: String, hp: Int) {
        _name = name
        _hp = hp
    }
    
    func attack(ultraman: Ultraman) {
        let injury = randomInt(5, 10)
        ultraman.hp -= injury
    }
}

類的拓展

// 如果在某個(gè)特定的應(yīng)用場(chǎng)景中你發(fā)現(xiàn)現(xiàn)有的類缺少了某項(xiàng)功能
// 那么可以通過(guò)類擴(kuò)展(extension)的方式現(xiàn)場(chǎng)添加這項(xiàng)功能
extension Point {
    var cgPoint: CGPoint {
        get { return CGPointMake(CGFloat(x), CGFloat(y)) }
    }
}
extension UIColor {
    
    static func randomColor() -> UIColor {
        let r = CGFloat(randomInt(0, 255)) / 255.0
        let g = CGFloat(randomInt(0, 255)) / 255.0
        let b = CGFloat(randomInt(0, 255)) / 255.0
        return UIColor(red: r, green: g, blue: b, alpha: 1)
    }
}
extension CGPoint {
    var myPoint: Point {
        get {
            return Point(x: Double(self.x), y: Double(self.y))
        }
    }
}

普遍隨機(jī)函數(shù)

func randomInt(min: UInt32, _ max: UInt32) -> Int {
    return Int(arc4random_uniform(max - min + 1) + min)
}

畫(huà)布里面的東西


    var pointsArray: [Point] = []
    var trisArray: [Triangle] = []
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first {
            let touchPoint = touch.locationInView(self)
            pointsArray.append(touchPoint.myPoint)
            if pointsArray.count == 3 {
                let t = Triangle(va: pointsArray[0], vb: pointsArray[1], vc: pointsArray[2])
                t.color = UIColor.randomColor()
                trisArray.append(t)
                setNeedsDisplay()
                pointsArray.removeAll()
            }
        }
    }
    
    override func drawRect(rect: CGRect) {
        for t in trisArray {
            t.draw()
        }
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容