JHHK

欢迎来到我的个人网站
行者常至 为者常成

17_01、字面量、模式匹配(一)

目录

字面量

//一、字面量
func literalUse() -> Void {
    
    //1、字面量
    do{
        print("--------1------")
        //代码中的10、false、"Jack"就是字面量
        var age = 10
        var isRed = false
        var name = "Jack"
    }

    
    //2、字面量
    do{
        /**
         常见字面量的默认类型
         public typealias IntegerLiteralType = Int
         public typealias FloatLiteralType = Double
         public typealias BooleanLiteralType = Bool
         public typealias StringLiteralType = String
         
         Swift自带的绝大部分类型,都支持直接通过字面量进行初始化
         Bool、Int、Float、Double、String、Array、Dictionary、Set、Optional等
         */
        
        
        // 可以通过typealias修改字面量的默认类型
        typealias FloatLiteralType = Float
        typealias IntegerLiteralType = UInt8
        var age = 10 // UInt8
        var height = 1.68 // Float
    }
}

字面量协议

//二、字面量协议
func literalProtocol() -> Void {
    /**
     Swift自带类型之所以能够通过字面量初始化,是因为它们遵守了对应的协议
     Bool : ExpressibleByBooleanLiteral
     Int : ExpressibleByIntegerLiteral
     Float、Double : ExpressibleByIntegerLiteral、ExpressibleByFloatLiteral
     Dictionary : ExpressibleByDictionaryLiteral
     String : ExpressibleByStringLiteral
     Array、Set : ExpressibleByArrayLiteral
     Optional : ExpressibleByNilLiteral var b: Bool = false // ExpressibleByBooleanLiteral
     */
    var i: Int = 10 // ExpressibleByIntegerLiteral
    var f0: Float = 10 // ExpressibleByIntegerLiteral
    var f1: Float = 10.0 // ExpressibleByFloatLiteral
    var d0: Double = 10 // ExpressibleByIntegerLiteral
    var d1: Double = 10.0 // ExpressibleByFloatLiteral
    var s: String = "jack" // ExpressibleByStringLiteral
    var arr: Array = [1, 2, 3] // ExpressibleByArrayLiteral
    var set: Set = [1, 2, 3] // ExpressibleByArrayLiteral
    var dict: Dictionary = ["jack" : 60] // ExpressibleByDictionaryLiteral
    var o: Optional<Int> = nil // ExpressibleByNilLiteral
}

字面量协议应用

/// 三、字面量协议应用
extension Int:ExpressibleByBooleanLiteral{
    public init(booleanLiteral value: Bool) {
        self = value ? 1 : 0
    }
}
class LCStudent17 : ExpressibleByIntegerLiteral,
                    ExpressibleByFloatLiteral,
                    ExpressibleByStringLiteral,
                    CustomStringConvertible {
    var name: String = ""
    var score: Double = 0
    required init(floatLiteral value: Double) { self.score = value }
    required init(integerLiteral value: Int) { self.score = Double(value) }
    required init(stringLiteral value: String) { self.name = value }
    required init(unicodeScalarLiteral value: String) { self.name = value }
    required init(extendedGraphemeClusterLiteral value: String) { self.name = value }
    var description: String { "name=\(name),score=\(score)" }
}
struct LCPoint17 {
    var x = 0.0
    var y = 0.0
}

extension LCPoint17 : ExpressibleByArrayLiteral,
                      ExpressibleByDictionaryLiteral {
    init(arrayLiteral elements: Double...) {
        guard elements.count > 0 else { return }
        self.x = elements[0]
        guard elements.count > 1 else { return }
        self.y = elements[1]
    }
    
    init(dictionaryLiteral elements: (String, Double)...) {
        for (k, v) in elements {
            if k == "x" {
                self.x = v
            } else if k == "y"{
                self.y = v
            }
        }
    }
}


func literalProtocolUse() -> Void {
    
    //1、字面量协议应用
    do{
        print("------1--------")
        let num:Int = true
        print(num)
    }
    
   
    //2、字面量协议应用
    do{
        print("-----2---------")
        var stu: LCStudent17 = 90
        print(stu) // name=,score=90.0
        stu = 98.5
        print(stu) // name=,score=98.5
        stu = "Jack"
        print(stu) // name=Jack,score=0.0
    }
   

    //3、字面量协议应用
    do{
        print("--------------")
        var p: LCPoint17 = [10.5, 20.5]
        print(p) // Point(x: 10.5, y: 20.5)
        p = ["x" : 11, "y" : 22]
        print(p) //Point(x: 11.0, y: 22.0)
    }
}

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.