第三周Swift總結(jié)



class AoTeMan{
    var name:String
    
    init(name:String){
        self.name = name
    }
    func action(otherName:String){
        print("\(name)打\(otherName)")
    }
}
class Monster {
    var name:String
    init(otherName:String){
        self.name = otherName
    }
}
let s1 = AoTeMan(name: "奧特曼")
let s2 = Monster(otherName: "小怪獸")
s1.action(s2.name)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s8 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s9 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s10 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}

class PC {
    func pcNumber() -> Int{
        return Int(arc4random_uniform(100)) + 1
    }
}
let b = PC()
let c = b.pcNumber()
var isP = true
while isP{
    print("請(qǐng)輸入1到100的隨機(jī)數(shù):",terminator:"")
    let a = inputInt()
    if a == c{
        print("恭喜你回答正確")
        isP = false
    }else if a > c{
        print("你的數(shù)字大了")
    }else {
        print("你的數(shù)字小了")
    }
}

在做以上兩個(gè)的時(shí)候還沒(méi)有發(fā)現(xiàn)什么問(wèn)題,畢竟是單一對(duì)象比較簡(jiǎn)單,但是在進(jìn)行下段代碼的時(shí)候就出現(xiàn)錯(cuò)誤了。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s7 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s9 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s10 {font-variant-ligatures: no-common-ligatures; color: #000000}

let a = 3.14
class minOvral {
    var radius:Double
    init(radius:Double){
        self.radius = radius
    }
    func area() -> Double{
        return a * radius * radius
    }
    func showRadius() -> Double{
        return (radius + 3) * (radius + 3) * a
    }
}
class MaxOvral {
    func area(radius:Double) -> Double{
        return (radius + 3) * (radius + 3) * a
    }
    func cf(radius:Double) -> Double{
        return 2 * a * (radius + 3)
    }
}
let minO = minOvral(radius: 3.0)
let maxO = MaxOvral()
print("圓環(huán)價(jià)格為:\((maxO.area(minO.radius) - minO.area()) * 3.5)")
print("周?chē)鷸艡趦r(jià)格:\(maxO.cf(minO.radius) * 1.5)")

對(duì)于兩個(gè)對(duì)象我就覺(jué)得比較有難度了,當(dāng)然現(xiàn)在解決了感覺(jué)比較簡(jiǎn)單,我沒(méi)有創(chuàng)建對(duì)象就直接用類(lèi)調(diào)用方法或者屬性,開(kāi)始以為創(chuàng)建對(duì)象只是賦值而已,如果設(shè)計(jì)到不賦值就不用創(chuàng)建對(duì)象,直接調(diào)用方法或者屬性,在繼續(xù)的觀看了一下老師的代碼發(fā)現(xiàn)對(duì)象也可以直接輸入到另外一個(gè)對(duì)象的方法中,這點(diǎn)很重要,在以后多個(gè)對(duì)象的時(shí)候應(yīng)該會(huì)占有很大的比重。記住一點(diǎn)對(duì)象調(diào)用方法和屬性。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s7 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s9 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

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

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

//訪問(wèn)修飾符
//-public
//-internal(內(nèi)部的)-默認(rèn)
//-private(私有)
class Circle {
    // stored property
        //-存儲(chǔ)屬性(保存和圓相關(guān)的數(shù)據(jù))
    var radius:Double
    
    
    init(radius:Double){
        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 radius * radius * M_PI}
    }
}

注意類(lèi)中的方法在沒(méi)有參數(shù)的情況下,另一種情況
var area:Double{
get{return。。。。}
}格式

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s9 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s10 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s11 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}

    init(){
        answer = Int(arc4random_uniform(100)) + 1
        counter = 0
        hint = ""
    }
    //行為抽象
    //判斷

不用非要在init()里面寫(xiě)參數(shù) 可以直接賦初值

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s8 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s9 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}

import Foundation
class Point {
    var x:Double
    var y:Double
    //被其它初始化方法所調(diào)用的初始化方法
    //指派初始化方法/指派構(gòu)造器
    init(x:Double,y:Double){
        self.x = x
        self.y = y
    }
    convenience init(){
        self.init(x:0,y:0)
    }
    convenience init(point:(Double,Double)){
        self.init(x:point.0,y:point.1)
    }
    func distanceTo(otherPoint:Point) -> Double{
        let a = x - otherPoint.x
        let b = y - otherPoint.y
        return sqrt(a * a + b * b)
    }
    func moveTo(x:Double,y:Double){
        self.x = x
        self.y = y
    }
}

這是今天其中第一個(gè)一個(gè)重要的知識(shí)點(diǎn),叫便利構(gòu)造器convenience

如上第一個(gè)convenience就是在打醬油的調(diào)用最開(kāi)始的init初始化方法,第二個(gè)convenience就是一個(gè)元組Point給x,y賦初值
有點(diǎn)生疏保留幾位小數(shù)代碼格式(如下代碼)

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}

print(NSString(format: "%.2f", a.perimeter))
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

    var hp:Int{
        get{
            return _hp
        }
        set{
            _hp = newValue > 0 ? newValue : 0
            
        }
    }
    var mp:Int{
        get{
            return _mp
        }
        set{
            _mp = newValue > 0 ? newValue : 0
        }

    }
    init(name:String,hp:Int,mp:Int){
        _name = name
        _hp = hp
        _mp = mp
    }

第二個(gè)重用的知識(shí)點(diǎn),get set方法 前者只能讀取數(shù)據(jù),后者可以改寫(xiě),set用起來(lái)很方便,比如這里的血量和藍(lán)量不能低于0就用一個(gè)三元運(yùn)算來(lái)解決,漂亮優(yōu)雅,高內(nèi)聚,低耦合,

以下代碼是產(chǎn)生隨機(jī)變量的標(biāo)準(zhǔn)代碼模式

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

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

由UIView提供的類(lèi)Canvas直接調(diào)用就是,不用再新建類(lèi)了,這里就是建立對(duì)象c然后用c來(lái)發(fā)送消息

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}

        let c = Canvas(frame:self.view.bounds)
        c.backgroundColor = UIColor.clearColor()
        self.view.addSubview(c)

第三個(gè)重要的知識(shí)點(diǎn)擴(kuò)展類(lèi)(extension),如果在某個(gè)特定的應(yīng)用中你發(fā)現(xiàn)現(xiàn)有的某個(gè)類(lèi)型少了某項(xiàng)功能,就可以通過(guò)這個(gè)方法來(lái)來(lái)添加這個(gè)功能。以下代碼主要是在Point類(lèi)中新建cgPoint這個(gè)方法來(lái)增加CGFloat單浮點(diǎn)這個(gè)功能。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}

extension Point{
    var cgPoint:CGPoint{
        get {return CGPointMake(CGFloat(x), CGFloat(y))}
    }
}

這或許是swift一大亮點(diǎn)。用問(wèn)號(hào)實(shí)現(xiàn)兩個(gè)不確定的值得轉(zhuǎn)換,很精練,如果為空就是取默認(rèn)值(即藍(lán)色)如果不為空就去輸入的那個(gè)顏色

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}

    var color:UIColor?
    (color ?? UIColor.blueColor()).set()

以下一大亮點(diǎn)就是弄了一個(gè)二維數(shù)組來(lái)實(shí)現(xiàn)三角形的不消失,即每產(chǎn)生一個(gè)一維數(shù)組pointArray然后用數(shù)組的append方法從最后的位置塞入newArray數(shù)組中,最后在用一個(gè)for循環(huán)來(lái)使二維數(shù)組中的每個(gè)值來(lái)實(shí)現(xiàn)draw()

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s8 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s9 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}

class Canvas: UIView {
    
    var pointArray:[Point] = []
    var newArray:[Triangle] = []
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        if let touch = touches.first{
            let touchPoint = touch.locationInView(self)
            pointArray.append(touchPoint.myPoint)
            
            if pointArray.count == 3{
               let t = Triangle(va: pointArray[0], vb: pointArray[1], vc: pointArray[2])
//                t.color = UIColor.redColor()
                t.color = UIColor.randomColor()
                newArray.append(t)
                setNeedsDisplay()//刷新界面

                pointArray.removeAll()
            }
        }
    }

    override func drawRect(rect: CGRect) {
        
        for t in newArray{
            t.draw()
        }

    }

}

求最大公約數(shù)

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}

func gcb(x:Int,_ y:Int) -> Int{
    
    var a = x < y ? x : y
    while a > 1{
        if x % a == 0 && y % a == 0{
            return a
        }
        a -= 1
    }
    return 1
}

以上代碼雖然可以求出最大公約數(shù) 但是太low了 這里介紹一個(gè)方法(短除法)就是較大的數(shù)除以較小的數(shù),如果除得盡較小數(shù)就是最大公約數(shù),如果除不盡就取其余數(shù),用較小數(shù)除以余數(shù),如果除得盡,余數(shù)就是最大公約數(shù),如果不,繼續(xù)除直到除得盡,除得盡的那個(gè)余數(shù)為最大公約數(shù),這里用了遞歸,比循環(huán)的效率也高很多,當(dāng)然逼格也高很多。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}

func gcb(x:Int,_ y:Int) -> Int{
    if x > y{
        return gcb(y,x)
    }
    else if y % x != 0{
        return gcb(y % x,x)
    }
    else{
        return x
    }
}

運(yùn)算符重載(為自定義的類(lèi)型定義運(yùn)算符)簡(jiǎn)單的說(shuō)就是個(gè)某個(gè)運(yùn)算符號(hào)加個(gè)什么功能,使使用者更加容易懂。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #31595d}

//運(yùn)算符重載(為自定義的類(lèi)型定義運(yùn)算符)
func +(one:Fraction,two:Fraction) -> Fraction{
    return one.add(two)
}

func -(one:Fraction,two:Fraction) -> Fraction{
    return one.sub(two)
}

func *(one:Fraction,two:Fraction) -> Fraction{
    return one.mul(two)
}

func /(one:Fraction,two:Fraction) -> Fraction{
    return one.div(two)
}

開(kāi)火車(chē)式的給予方法就是在后面.方法就行,這里我犯的一個(gè)錯(cuò)就是返回值沒(méi)有弄成Fraction。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}

    func add(otherfraction:Fraction) -> Fraction{
        return   Fraction(num: _num * otherfraction._den + _den * otherfraction._num, den: _den * otherfraction._den)
    }
    
    func sub(otherfraction:Fraction) -> Fraction{
        return   Fraction(num: _num * otherfraction._den - _den * otherfraction._num, den: _den * otherfraction._den)
    }
    
    func mul(otherfraction:Fraction) -> Fraction{
        return   Fraction(num: _num * otherfraction._num  , den: _den * otherfraction._den)
    }
    
    func div(otherfraction:Fraction) -> Fraction{
        return   Fraction(num: _num * otherfraction._den  , den: _den * otherfraction._num)
    }

這里有個(gè)小知識(shí)點(diǎn)可以屏蔽名字字符串中最后一個(gè)字

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}

            
            let displayName = _name.substringToIndex(_name.endIndex.predecessor())
            
            
            return displayName + "*"

在swift里面的值不能給空。除非自帶?,這是swift一個(gè)特點(diǎn)。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}

    //發(fā)牌
    func deal() -> Card?{
        if hasMoreCards{
            return cardsArray.removeFirst()
        }
        return nil
    }

這里有個(gè)小結(jié),以后遇到要你打亂數(shù)組里面值得位置就用這個(gè)方法,一個(gè)循環(huán)然后給出另外一個(gè)數(shù)組里面的值,用元組進(jìn)行兩兩交換位置,另外一個(gè)值隨機(jī)變換,循環(huán)停止交換停止。這里我開(kāi)始想到的用數(shù)組和字典來(lái)解決,就是用一個(gè)for循環(huán)把數(shù)組里面的值弄到字典里面去,利用字典的無(wú)序性打亂數(shù)組里面的值得位置 ,然后在利用一個(gè)for循環(huán)把字典里面的value賦給數(shù)組。但是老師說(shuō)字典并不是無(wú)序的,是另外一種有序,只是不是我們正常的那種有序而已。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s8 {font-variant-ligatures: no-common-ligatures; color: #703daa}

    //洗牌
    func shuffle(){
        reset()
        for i in 0..<cardsArray.count{
            let j = randomInt(0,max: UInt32(cardsArray.count - 1))
            (cardsArray[i],cardsArray[j]) = (cardsArray[j],cardsArray[i])
        }
        
    }

這里是枚舉 還有調(diào)用枚舉的方法也是比較特殊,注意觀看以下代碼便是。

p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s5 {font: 14.0px 'Apple Color Emoji'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}

enum Suite:String{
    case Spade = "??"
    case Heart = "??"
    case Club = "??"
    case Diamond = "??"
    
}
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #31595d}

        let suites = [Suite.Spade,.Heart,.Club,.Diamond]

可以將子類(lèi)型的對(duì)象賦值給父類(lèi)型的變量(因?yàn)樽宇?lèi)跟父類(lèi)之間是IS-A關(guān)系)
如果要將父類(lèi)型的變量轉(zhuǎn)換成子類(lèi)型需要用as運(yùn)算符進(jìn)行類(lèi)型轉(zhuǎn)換
如果能夠確認(rèn)父類(lèi)型的變量中就是某種子類(lèi)型的對(duì)象可以用as!進(jìn)行轉(zhuǎn)換
如果不確定父類(lèi)型的變量中是哪種子類(lèi)型可以用as?嘗試轉(zhuǎn)換
繼承: 從已有的類(lèi)創(chuàng)建新類(lèi)的過(guò)程
提供繼承信息的稱(chēng)為父類(lèi)(超類(lèi)/基類(lèi))
得到繼承信息的稱(chēng)為子類(lèi)(派生類(lèi)/衍生類(lèi))
通常子類(lèi)除了得到父類(lèi)的繼承信息還會(huì)增加一些自己特有的東西
所以子類(lèi)的能力一定比父類(lèi)更強(qiáng)大

繼承的意義在于子類(lèi)可以復(fù)用父類(lèi)的代碼并且增強(qiáng)系統(tǒng)現(xiàn)有的功能
在做面向?qū)ο蟮膯?wèn)題上,一定要事先理清思路再下手,不然越做越混亂,父類(lèi)的確定,下面的屬性,還有具體方法,一定要所有子類(lèi)都滿足,也就是所有子類(lèi)取并集,而子類(lèi)酒會(huì)繼承父類(lèi)的功能,甚至在繼承父類(lèi)的功能上做些改變。
// 父類(lèi)有的方法子類(lèi)可以重新實(shí)現(xiàn) 這個(gè)過(guò)程叫方法重寫(xiě)
// 需要在方法前添加override關(guān)鍵字
// 重寫(xiě)有時(shí)也被稱(chēng)為置換/覆蓋/覆寫(xiě)
注意這里是重寫(xiě),不要和重載搞混了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開(kāi)發(fā)和運(yùn)行環(huán)境,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,810評(píng)論 0 11
  • swift語(yǔ)法 swift初見(jiàn)第一個(gè)程序輸出hello,world! 在swift中這行代碼就算一個(gè)完整的程序。你...
    鄉(xiāng)野村夫漢閱讀 1,611評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,662評(píng)論 18 399
  • 1.import static是Java 5增加的功能,就是將Import類(lèi)中的靜態(tài)方法,可以作為本類(lèi)的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,424評(píng)論 0 2
  • 今天我們?nèi)チ薶ouse of hope,也就是養(yǎng)老院~ 這邊的養(yǎng)老院的基礎(chǔ)設(shè)施很好。 一人一間屋子,每間屋子里都有...
    書(shū)店溫老板閱讀 371評(píng)論 2 2

友情鏈接更多精彩內(nèi)容