第三周第三天

2016-08-12  本文已影响0人  theDeskmateOfSb

第三周第三天

class Point {
    var x: Double
    var y: Double
    
    // 我们可以在一个类中定义多个初始化方法
    
    // 便利初始化方法 / 便利构造器
    // 调用了其他的初始化方法的初始化方法
    convenience init() {
        self.init(x: 0, y: 0)
    }
    
    convenience init(point: (Double, Double)) {
        self.init(x: point.0, y: point.1)
    }
    
    // 指派初始化方法 / 指派构造器
    // 被其他初始化方法调用的初始化方法
    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
    }
}

调用

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

// 0. 发现类
//  - 在对问题的描述中找名词和动词
//  - 名词会成为类或者类中的属性 动词会成为类中的方法

// 1. 定义类
//  - 数据抽象(属性)
//  - 行为抽象(方法)
//  - 初始化方法

// 访问修饰符
//  - public (公开)
//  - internal (内部的) - 默认
//  - private (私有)
class Circle {
    // stored property
    // 存储属性(保存和圆相关的数据的属性)
    var center: Point
    var radius: Double
    
    init(center: Point, radius: Double) {
        self.center = center
        self.radius = radius
    }
    
    // 通常获得某个计算出的值的方法都可以设计成计算属性
    // computational property
    // 计算属性(通过对存储属性做运算得到的属性)
    var perimeter: Double {
        // 圆的周长是一个只读属性
        // 所以此处只有get{}没有set{}
        get { return 2 * M_PI * radius }
    }
    
    var area: Double {
        get { return M_PI * radius * radius }
    }
}

奥特曼的类里面有属性的保护和调用

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
    }
}

类的拓展

// 如果在某个特定的应用场景中你发现现有的类缺少了某项功能
// 那么可以通过类扩展(extension)的方式现场添加这项功能
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))
        }
    }
}

普遍随机函数

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

画布里面的东西


    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()
        }
    }

}

上一篇下一篇

猜你喜欢

热点阅读