第三周Swift总结



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("请输入1到100的随机数:",terminator:"")
    let a = inputInt()
    if a == c{
        print("恭喜你回答正确")
        isP = false
    }else if a > c{
        print("你的数字大了")
    }else {
        print("你的数字小了")
    }
}

在做以上两个的时候还没有发现什么问题,毕竟是单一对象比较简单,但是在进行下段代码的时候就出现错误了。

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("圆环价格为:\((maxO.area(minO.radius) - minO.area()) * 3.5)")
print("周围栅栏价格:\(maxO.cf(minO.radius) * 1.5)")

对于两个对象我就觉得比较有难度了,当然现在解决了感觉比较简单,我没有创建对象就直接用类调用方法或者属性,开始以为创建对象只是赋值而已,如果设计到不赋值就不用创建对象,直接调用方法或者属性,在继续的观看了一下老师的代码发现对象也可以直接输入到另外一个对象的方法中,这点很重要,在以后多个对象的时候应该会占有很大的比重。记住一点对象调用方法和属性。

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.发现类
//-在对问题的描述中找到名词和动词
//-名词会成为类或类中的属性,动词会成为类中的方法

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

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

注意类中的方法在没有参数的情况下,另一种情况
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()里面写参数 可以直接赋初值

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
    //被其它初始化方法所调用的初始化方法
    //指派初始化方法/指派构造器
    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
    }
}

这是今天其中第一个一个重要的知识点,叫便利构造器convenience

如上第一个convenience就是在打酱油的调用最开始的init初始化方法,第二个convenience就是一个元组Point给x,y赋初值
有点生疏保留几位小数代码格式(如下代码)

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
    }

第二个重用的知识点,get set方法 前者只能读取数据,后者可以改写,set用起来很方便,比如这里的血量和蓝量不能低于0就用一个三元运算来解决,漂亮优雅,高内聚,低耦合,

以下代码是产生随机变量的标准代码模式

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提供的类Canvas直接调用就是,不用再新建类了,这里就是建立对象c然后用c来发送消息

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)

第三个重要的知识点扩展类(extension),如果在某个特定的应用中你发现现有的某个类型少了某项功能,就可以通过这个方法来来添加这个功能。以下代码主要是在Point类中新建cgPoint这个方法来增加CGFloat单浮点这个功能。

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一大亮点。用问号实现两个不确定的值得转换,很精练,如果为空就是取默认值(即蓝色)如果不为空就去输入的那个颜色

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

以下一大亮点就是弄了一个二维数组来实现三角形的不消失,即每产生一个一维数组pointArray然后用数组的append方法从最后的位置塞入newArray数组中,最后在用一个for循环来使二维数组中的每个值来实现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()
        }

    }

}

求最大公约数

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
}

以上代码虽然可以求出最大公约数 但是太low了 这里介绍一个方法(短除法)就是较大的数除以较小的数,如果除得尽较小数就是最大公约数,如果除不尽就取其余数,用较小数除以余数,如果除得尽,余数就是最大公约数,如果不,继续除直到除得尽,除得尽的那个余数为最大公约数,这里用了递归,比循环的效率也高很多,当然逼格也高很多。

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

运算符重载(为自定义的类型定义运算符)简单的说就是个某个运算符号加个什么功能,使使用者更加容易懂。

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}

//运算符重载(为自定义的类型定义运算符)
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)
}

开火车式的给予方法就是在后面.方法就行,这里我犯的一个错就是返回值没有弄成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)
    }

这里有个小知识点可以屏蔽名字字符串中最后一个字

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一个特点。

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}

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

这里有个小结,以后遇到要你打乱数组里面值得位置就用这个方法,一个循环然后给出另外一个数组里面的值,用元组进行两两交换位置,另外一个值随机变换,循环停止交换停止。这里我开始想到的用数组和字典来解决,就是用一个for循环把数组里面的值弄到字典里面去,利用字典的无序性打乱数组里面的值得位置 ,然后在利用一个for循环把字典里面的value赋给数组。但是老师说字典并不是无序的,是另外一种有序,只是不是我们正常的那种有序而已。

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

这里是枚举 还有调用枚举的方法也是比较特殊,注意观看以下代码便是。

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]

可以将子类型的对象赋值给父类型的变量(因为子类跟父类之间是IS-A关系)
如果要将父类型的变量转换成子类型需要用as运算符进行类型转换
如果能够确认父类型的变量中就是某种子类型的对象可以用as!进行转换
如果不确定父类型的变量中是哪种子类型可以用as?尝试转换
继承: 从已有的类创建新类的过程
提供继承信息的称为父类(超类/基类)
得到继承信息的称为子类(派生类/衍生类)
通常子类除了得到父类的继承信息还会增加一些自己特有的东西
所以子类的能力一定比父类更强大

继承的意义在于子类可以复用父类的代码并且增强系统现有的功能
在做面向对象的问题上,一定要事先理清思路再下手,不然越做越混乱,父类的确定,下面的属性,还有具体方法,一定要所有子类都满足,也就是所有子类取并集,而子类酒会继承父类的功能,甚至在继承父类的功能上做些改变。
// 父类有的方法子类可以重新实现 这个过程叫方法重写
// 需要在方法前添加override关键字
// 重写有时也被称为置换/覆盖/覆写
注意这里是重写,不要和重载搞混了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,629评论 0 11
  • swift语法 swift初见第一个程序输出hello,world! 在swift中这行代码就算一个完整的程序。你...
    乡野村夫汉阅读 1,061评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,211评论 0 2
  • 今天我们去了house of hope,也就是养老院~ 这边的养老院的基础设施很好。 一人一间屋子,每间屋子里都有...
    书店温老板阅读 317评论 2 2