글꼴(Literal)

2800 단어
var age = 10
var isRed = false
var name = "Jack"

위 코드의 10,false,"Jack"은 바로 글자의 양이다
  • 일반 문자 크기의 기본 유형
  • public typealias IntegerLiteralType = Int
    public typealias FloatLiteralType = Double
    public typealias BooleanLiteralType = Bool
    public typealias StringLiteralType = String
    
  • Swift 대부분의 유형은 직접 서면으로 초기화할 수 있음
  • Bool
    Int
    Float
    Double
    String
    Dictionary
    Set
    Optional
    

    서면량 협의

  • Swift 자대 유형이 나중에 서면량으로 초기화될 수 있는 이유는 그들이 수중에 대응하는 협의
  • 를 존중하기 때문이다.
    Bool : ExpressibleByBooleanLiteral
    Int : ExpressibleByIntegerLiteral
    Float ,Double : ExpressibleByIntegerLiteral ,ExpressibleByFloatLiteral
    String : ExpressibleByStringLiteral
    Dictionary : ExpressibleByDictionaryLiteral
    Set , Array : ExpressibleByArrayLiteral
    Optional : ExpressibleByNilLiteral
    

    서면량 프로토콜 응용

    extension Int: ExpressibleByBooleanLiteral {
        public init(booleanLiteral value: Bool) {
            self = value ? 1 : 0
        }
    }
    var num: Int = true
    print(num)//1
    
    class Student: 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)"
            }
    }
    
    var stu: Student = 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
    
    struct Point {
        var x = 0.0, y = 0.0
    }
    extension Point: 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
                }
            }
        }
    }
    var p: Point = [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)
    

    좋은 웹페이지 즐겨찾기