¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³ | »áÔ±ÖÐÐÄ | ÎÒҪͶ¸å Àî´óͬ £¨https://www.lidatong.com.cn/£©- ¿Æ¼¼¡¢½¨Õ¾¡¢¾­Ñé¡¢ÔÆ¼ÆËã¡¢5G¡¢´óÊý¾Ý,Õ¾³¤Íø!
µ±Ç°Î»Ö㺠Ê×Ò³ > °Ù¿Æ > ÕýÎÄ

Swiftѧϰ֮·04-ö¾Ù

·¢²¼Ê±¼ä£º2020-12-14 07:21:48 ËùÊôÀ¸Ä¿£º°Ù¿Æ À´Ô´£ºÍøÂçÕûÀí
µ¼¶Á£ºÃ¶¾Ù ÔÚ Swift ÖÐ,ö¾ÙÀàÐÍÊÇÒ»µÈ(first-class)ÀàÐÍ¡£ËüÃDzÉÓÃÁ˺ܶàÔÚ´«Í³ÉÏÖ»±»Àà(class)ËùÖ§³ÖµÄÌØ ÐÔ,ÀýÈç¼ÆËãÐÍÊôÐÔ(computed properties),ÓÃÓÚÌṩö¾ÙÖµµÄ¸½¼ÓÐÅÏ¢,ʵÀý·½·¨(instance method s),ÓÃÓÚÌṩºÍö¾ÙÖµÏà¹ØÁªµÄ¹¦ÄÜ¡£Ã¶¾ÙÒ²¿ÉÒÔ¶¨Òå¹¹Ô캯

ö¾Ù

ÔÚ Swift ÖÐ,ö¾ÙÀàÐÍÊÇÒ»µÈ(first-class)ÀàÐÍ¡£ËüÃDzÉÓÃÁ˺ܶàÔÚ´«Í³ÉÏÖ»±»Àà(class)ËùÖ§³ÖµÄÌØ ÐÔ,ÀýÈç¼ÆËãÐÍÊôÐÔ(computed properties),ÓÃÓÚÌṩö¾ÙÖµµÄ¸½¼ÓÐÅÏ¢,ʵÀý·½·¨(instance method s),ÓÃÓÚÌṩºÍö¾ÙÖµÏà¹ØÁªµÄ¹¦ÄÜ¡£Ã¶¾ÙÒ²¿ÉÒÔ¶¨Òå¹¹Ô캯Êý(initializers)À´Ìṩһ¸ö³õʼֵ;¿ÉÒÔÔÚÔ­ ʼʵÏֵĻù´¡ÉÏÀ©Õ¹ËüÃǵŦÄÜ;»¹¿ÉÒÔ×ñÊØÐ­Òé(protocols)À´Ìṩ±ê×¼µÄ¹¦ÄÜ¡£

ö¾ÙÓï·¨

ʹÓà enum ¹Ø¼ü´ÊÀ´´´½¨Ã¶¾Ù²¢ÇÒ°ÑËüÃǵÄÕû¸ö¶¨Òå·ÅÔÚÒ»¶Ô´óÀ¨ºÅÄÚ:

enum CompassPoint {
    case North
    case South
    case East
    case West
}

ö¾ÙÖж¨ÒåµÄÖµ(Èç North,South,East ºÍ West )ÊÇÕâ¸öö¾ÙµÄ³ÉÔ±Öµ(»ò³ÉÔ±)¡£ÄãʹÓà case ¹Ø¼ü×ÖÀ´ ¶¨ÒåÒ»¸öеÄö¾Ù³ÉÔ±Öµ¡£


*×¢ÒâÓë C ºÍ Objective-C ²»Í¬,Swift µÄö¾Ù³ÉÔ±ÔÚ±»´´½¨Ê±²»»á±»¸³ÓèÒ»¸öĬÈϵÄÕûÐÍÖµ¡£ÔÚÉÏÃæµÄ
nt Àý×ÓÖÐ,North,East ºÍ West ²»»á±»ÒþʽµØ¸³ÖµÎª 0,1,2 ºÍ 3 ¡£Ïà·´,ÕâЩö¾Ù³ÉÔ±±¾Éí ¾ÍÊÇÍ걸µÄÖµ,ÕâЩֵµÄÀàÐÍÊÇÒѾ­Ã÷È·¶¨ÒåºÃµÄ CompassPoint ÀàÐÍ¡£*

¹ØÁªÖµ

ÔÚSwiftÖУ¬Ê¹ÓÃÈçÏ·½Ê½¶¨Òå±íʾÁ½ÖÖÉÌÆ·ÌõÐÎÂëµÄö¾Ù

enum Barcode {
    case UPCA(Int,Int,Int)
    case QRCode(String)
}

ÒÔÉÏ´úÂë¿ÉÒÔÕâôÀí½â:

¡°¶¨ÒåÒ»¸öÃûΪ Barcode µÄö¾ÙÀàÐÍ,ËüµÄÒ»¸ö³ÉÔ±ÖµÊǾßÓÐ (Int,Int,Int) ÀàÐ͹ØÁªÖµµÄ UPCA,ÁíÒ» ¸ö³ÉÔ±ÖµÊǾßÓÐ String ÀàÐ͹ØÁªÖµµÄ QRCode ¡£¡±

var productBarcode = Barcode.UPCA(8,85909,51226,3)
// ͬһ¸öÉÌÆ·¿ÉÒÔ±»·ÖÅäÒ»¸ö²»Í¬ÀàÐ͵ÄÌõÐÎÂë
productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

ԭʼֵ

×÷Ϊ¹ØÁªÖµµÄÌæ´úÑ¡Ôñ,ö¾Ù³ÉÔ±¿ÉÒÔ±»Ä¬ÈÏÖµ(³ÆÎªÔ­Ê¼Öµ)Ô¤Ìî³ä,ÕâЩԭʼֵµÄÀàÐͱØÐëÏàͬ¡£
ÕâÊÇÒ»¸öʹÓà ASCII Âë×÷ΪԭʼֵµÄö¾Ù:

enum ASCIIControlCharacter: Character {
    case Tab = "t"
    case LineFeed = "n"
    case CarriageReturn = "r"
}

ԭʼֵµÄÒþʽ¸³Öµ

ÏÂÃæµÄö¾ÙÊǶÔ֮ǰ Planet Õâ¸öö¾ÙµÄÒ»¸öϸ»¯,ÀûÓÃÕûÐ͵ÄԭʼֵÀ´±íʾÿ¸öÐÐÐÇÔÚÌ«ÑôϵÖеÄ˳Ðò:

enum Planet: Int {
    case Mercury = 1,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
}

ÔÚÉÏÃæµÄÀý×ÓÖÐ,Plant.Mercury µÄÏÔʽԭʼֵΪ 1,Planet.Venus µÄÒþʽԭʼֵΪ 2,ÒÀ´ÎÀàÍÆ¡£

ÏÂÃæµÄÀý×ÓÊÇ CompassPoint ö¾ÙµÄϸ»¯,ʹÓÃ×Ö·û´®ÀàÐ͵ÄԭʼֵÀ´±íʾ¸÷¸ö·½ÏòµÄÃû³Æ:

enum CompassPoint: String {
    case North,East,West
}

ÉÏÃæÀý×ÓÖÐ,CompassPoint.South ÓµÓÐÒþʽԭʼֵ South,ÒÀ´ÎÀàÍÆ¡£

ʹÓÃö¾Ù³ÉÔ±µÄ rawValue ÊôÐÔ¿ÉÒÔ·ÃÎʸÃö¾Ù³ÉÔ±µÄԭʼֵ:

let earthsOrder = Planet.Earth.rawValue 
// earthsOrder ֵΪ 3
let sunsetDirection = CompassPoint.West.rawValue 
// sunsetDirection ֵΪ "West"
// ʹÓÃԭʼֵ³õʼ»¯Ã¶¾ÙʵÀý
let possiblePlanet = Planet(rawValue: 7)
// possiblePlanet ÀàÐÍΪ Planet? ֵΪ Planet.Uranus

µÝ¹éö¾Ù

µÝ¹éö¾Ù(recursive enumeration) ÊÇÒ»ÖÖö¾ÙÀàÐÍ,ËüÓÐÒ»¸ö»ò¶à¸öö¾Ù³ÉԱʹÓøÃö¾ÙÀàÐ͵ÄʵÀý×÷Ϊ¹ØÁª Öµ¡£Ê¹Óõݹéö¾Ùʱ,±àÒëÆ÷»á²åÈëÒ»¸ö¼ä½Ó²ã¡£Äã¿ÉÒÔÔÚö¾Ù³ÉԱǰ¼ÓÉÏ indirect À´±íʾ¸Ã³ÉÔ±¿ÉµÝ¹é¡£

// µÚÒ»ÖÖ·½Ê½
enum ArithmeticExpression {
    case Number(Int)
    indirect case Addition(ArithmeticExpression,ArithmeticExpression)
    indirect case Multiplication(ArithmeticExpression,ArithmeticExpression)
}

// µÚ¶þÖÖ·½Ê½

indirect enum ArithmeticExpression {
    case Number(Int)
    case Addition(ArithmeticExpression,ArithmeticExpression)
    case Multiplication(ArithmeticExpression,ArithmeticExpression)
}

ʵÀý·½·¨

func evaluate(expression: ArithmeticExpression) -> Int {
    switch expression {
    case .Number(let value):
        return value
    case .Addition(let left,let right):
        return evaluate(left) + evaluate(right)
    case .Multiplication(let left,let right):
        return evaluate(left) * evaluate(right)
    }
} // ¼ÆËã (5 + 4) * 2
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five,four)
let product = ArithmeticExpression.Multiplication(sum,ArithmeticExpression.Number(2)) print(evaluate(product)) // Êä³ö "18"

¸öÈ˸ϽÅö¾ÙµÝ¹é¸ö¹ØÁªÖµ²î²»¶à

£¨±à¼­£ºÀî´óͬ£©

¡¾ÉùÃ÷¡¿±¾Õ¾ÄÚÈݾùÀ´×ÔÍøÂ磬ÆäÏà¹ØÑÔÂÛ½ö´ú±í×÷Õ߸öÈ˹۵㣬²»´ú±í±¾Õ¾Á¢³¡¡£ÈôÎÞÒâÇÖ·¸µ½ÄúµÄȨÀû£¬Ç뼰ʱÓëÁªÏµÕ¾³¤É¾³ýÏà¹ØÄÚÈÝ!

    ÍÆ¼öÎÄÕÂ
      ÈȵãÔĶÁ