第三周第三天

第三周第三天

class Point {
    var x: Double
    var y: Double
    
    // 我們可以在一個類中定義多個初始化方法
    
    // 便利初始化方法 / 便利構(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)類
//  - 在對問題的描述中找名詞和動詞
//  - 名詞會成為類或者類中的屬性 動詞會成為類中的方法

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

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

奧特曼的類里面有屬性的保護和調(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
    }
}

類的拓展

// 如果在某個特定的應用場景中你發(fā)現(xiàn)現(xiàn)有的類缺少了某項功能
// 那么可以通過類擴展(extension)的方式現(xiàn)場添加這項功能
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))
        }
    }
}

普遍隨機函數(shù)

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

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜘澜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子响疚,更是在濱河造成了極大的恐慌鄙信,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽寒,死亡現(xiàn)場離奇詭異扮碧,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門慎王,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚓土,“玉大人赖淤,你說我怎么就攤上這事蜀漆。” “怎么了咱旱?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵确丢,是天一觀的道長。 經(jīng)常有香客問我吐限,道長鲜侥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任诸典,我火速辦了婚禮描函,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狐粱。我一直安慰自己舀寓,他們只是感情好,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布肌蜻。 她就那樣靜靜地躺著互墓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒋搜。 梳的紋絲不亂的頭發(fā)上篡撵,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音齿诞,去河邊找鬼酸休。 笑死,一個胖子當著我的面吹牛祷杈,可吹牛的內(nèi)容都是我干的斑司。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼但汞,長吁一口氣:“原來是場噩夢啊……” “哼宿刮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起私蕾,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤僵缺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踩叭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磕潮,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡翠胰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了自脯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片之景。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膏潮,靈堂內(nèi)的尸體忽然破棺而出锻狗,到底是詐尸還是另有隱情,我是刑警寧澤焕参,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布轻纪,位于F島的核電站,受9級特大地震影響叠纷,放射性物質(zhì)發(fā)生泄漏刻帚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一讲岁、第九天 我趴在偏房一處隱蔽的房頂上張望我擂。 院中可真熱鬧,春花似錦缓艳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至互妓,卻和暖如春贝攒,著一層夾襖步出監(jiān)牢的瞬間纬朝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留未蝌,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓掩幢,卻偏偏與公主長得像缤骨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子交胚,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

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