美文网首页
第三周第三天

第三周第三天

作者: theDeskmateOfSb | 来源:发表于2016-08-12 08:11 被阅读0次

    第三周第三天

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

    相关文章

      网友评论

          本文标题:第三周第三天

          本文链接:https://www.haomeiwen.com/subject/aqwssttx.html