Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Swift ²¢Ðбà³ÌÏÖ×´ºÍÕ¹Íû - async/await ºÍ²ÎÓëÕßģʽ
 
À´Ô´£º°¢ÀïÔÆ ·¢²¼ÓÚ£º2017-2-14
  2413  次浏览      27
 

ÕâÆªÎÄÕ²»ÊÇÕë¶Ôµ±Ç°°æ±¾ Swift 3 µÄ£¬¶øÊǶÔÔ¤¼ÆÓÚ 2018 Äê·¢²¼µÄ Swift 5 µÄÒ»Ð©ÌØÐԵIJÂÏë¡£Èç¹ûÁ½ÄêºóÎÒ»¹¼ÇµÃÕâÆªÎÄÕ£¬¿ÉÄÜ»á»ØÀ´¸üÐÂÒ»²¨¡£ÔÚ´Ë֮ǰ£¬Çëµ±×÷һƪ¶ÔÏÖ´úÓïÑÔ²¢Ðбà³ÌÌØÐԵIJ»Ì«ÑϽ÷¿ÆÆÕÎÄÀ´¿´´ý¡£

CPU ËÙ¶ÈÒѾ­ºÜ¶àÄêûÓдóµÄÍ»ÆÆÁË£¬Ó²¼þÐÐÒµ¸ü¶àµØ½«Öصã·ÅÔÚ¶àºËÐļ¼ÊõÉÏ£¬¶øÓëÖ®¶ÔÓ¦£¬Èí¼þÖв¢Ðбà³ÌµÄ¸ÅÄîÒ²Ô½À´Ô½ÖØÒª¡£ÈçºÎÀûÓöàºËÐÄ CPU£¬ÒÔ¼°ÓµÓÐÃܼ¯¼ÆËãµ¥ÔªµÄ GPU£¬À´½øÐпìËٵĴ¦ÀíºÍ¼ÆË㣬ÊǺܶ࿪·¢ÕßÊ®·Ö¸ÐÐËȤµÄÊÂÇé¡£ÔÚ½ñÄêÄê³õ Swift 4 µÄÕ¹ÍûÖУ¬Swift ÏîÄ¿µÄ¸ºÔðÈË Chris Lattern ±íʾ¿ÉÄܲ¢²»»áÕâô¿ìÌṩÓïÑԲ㼶µÄ²¢Ðбà³ÌÖ§³Ö£¬²»¹ý×î½ü Chris ÓÖÔÚ IBM µÄÒ»´Î¹ØÓÚ±àÒëÆ÷µÄ·ÖÏíÖÐÃ÷È·Ìáµ½£¬Óкܴó¿ÉÄÜ»áÔÚ Swift 5 ÖÐÌí¼ÓÓïÑÔ¼¶±ðµÄ²¢ÐÐÌØÐÔ¡£

Õâ¶Ô Swift Éú̬ÊÇÒ»¸öºÃÏûÏ¢£¬Ò²ÊÇÒ»¸ö´óÏûÏ¢¡£²»¹ýÕâÆäʵ²¢²»ÊÇʲôÐÂÏʵÄÊÂÇ飬ÉõÖÁ¿ÉÒÔ˵ÊÇÒ»ÃÅÏÖ´úÓïÑÔ·¢Õ¹µÄ±Ø¾­Â·¾¶ºÍ±Ø±¸ÌØÐÔ¡£ÒòΪ Objective-C/Swift ÏÖÔÚȱ·¦Õâ·½ÃæµÄÄÚÈÝ£¬ËùÒԺܶàרעÓÚ iOS µÄ¿ª·¢Õß¶Ô²¢Ðбà³Ì»áºÜİÉú¡£ÎÒÔÚÕâÆªÎÄÕÂÀï½áºÏ Swift ÏÖ×´¼òµ¥½éÉÜÁËһЩÕâÃÅÓïÑÔÀï²¢Ðбà³Ì¿ÉÄܵÄʹÓ÷½Ê½£¬Ï£ÍûÄܰïÖú´ó¼Ò³õ¿úÞ¶¡£(ËäÈ»ÎÒ×Ô¼ºÒ²»¹Ãþ²»µ½Ãž¶Ôںη½...)

Swift ÏÖÓеIJ¢ÐÐÄ£ÐÍ

Swift ÏÖÔÚûÓÐÓïÑÔ²ãÃæµÄ²¢ÐлúÖÆ£¬²»¹ýÎÒÃÇȷʵÓÐһЩ»ùÓÚ¿âµÄÏ̵߳÷¶ÈµÄ·½°¸£¬À´½øÐв¢ÐвÙ×÷¡£

»ùÓÚ±Õ°üµÄÏ̵߳÷¶È

ËäÈ»»ÐÈç¸ôÊÀ£¬²»¹ý GCD (Grand Central Dispatch) ȷʵÊÇ´Ó iOS 4 ²Å¿ªÊ¼×ß½øÎÒÃǵÄÊÓÒ°µÄ¡£ÔÚ GCD ºÍ block ±»¼ÓÈë֮ǰ£¬ÎÒÃÇÏëҪпªÒ»¸öÏß³ÌÐèÒªÓõ½ NSThread »òÕß NSOperation£¬È»ºóʹÓà delegate µÄ·½Ê½À´½ÓÊջص÷¡£ÕâÖÖÊéд·½Ê½Ì«¹ý¹ÅÀÏ£¬Ò²Ï൱Âé·³£¬ÈÝÒ׳ö´í¡£GCD ΪÎÒÃÇ´øÀ´ÁËÒ»Ì׺ܼòµ¥µÄ API£¬¿ÉÒÔÈÃÎÒÃÇÔÚÏß³ÌÖнøÐе÷¶È¡£Ôںܳ£Ò»¶Îʱ¼äÀÕâÌ× API ³ÉΪÁË iOS ÖжàÏ̱߳à³ÌµÄÖ÷Á÷·½Ê½¡£Swift ¼Ì³ÐÁËÕâÌ× API£¬²¢ÇÒÔÚ Swift 3 Öн«ËüÃÇÖØÐµ¼ÈëΪÁ˸ü·ûºÏ Swift Ó﷨ϰ¹ßµÄÐÎʽ¡£ÏÖÔÚÎÒÃÇ¿ÉÒÔ½«Ò»¸ö²Ù×÷ºÜÈÝÒ×µØÅÉ·¢µ½ºǫ́½øÐУ¬Ê×ÏÈ´´½¨Ò»¸öºǫ́¶ÓÁУ¬È»ºóµ÷Óà async ²¢´«ÈëÐèÒªÖ´Ðеıհü¼´¿É£º

ÔÚ async µÄ±Õ°üÖУ¬ÎÒÃÇ»¹¿ÉÒÔ¼ÌÐø½øÐÐÅÉ·¢£¬×î³£¼ûµÄÓ÷¨¾ÍÊÇ¿ªÒ»¸öºǫ́Ï߳̽øÐкÄʱ²Ù×÷ (´ÓÍøÂç»ñÈ¡Êý¾Ý£¬»òÕß I/O µÈ)£¬È»ºóÔÚÊý¾Ý×¼±¸Íê³Éºó£¬»Øµ½Ö÷Ï̸߳üРUI£º

µ±È»£¬ÏÖÔÚ¹À¼ÆÒѾ­²»»áÓÐÈËÔÙÕâô×öÍøÂçÇëÇóÁË¡£ÎÒÃÇ¿ÉÒÔʹÓÃרÃÅµÄ URLSession À´½øÐзÃÎÊ¡£URLSession ºÍ¶ÔÓ¦µÄ dataTask »á½«ÍøÂçÇëÇóÅÉ·¢µ½ºǫ́Ị̈߳¬ÎÒÃDz»ÔÙÐèÒªÏÔʽ¶ÔÆäÖ¸¶¨¡£²»¹ý¸üРUI µÄ¹¤×÷»¹ÊÇÐèÒª»Øµ½Ö÷Ị̈߳º

»Øµ÷µØÓü

»ùÓÚ±Õ°üÄ£Ð͵ķ½Ê½£¬²»ÂÛÊÇÖ±½ÓÅÉ·¢»¹ÊÇͨ¹ý URLSession µÄ·â×°½øÐвÙ×÷£¬¶¼ÃæÁÙÒ»¸öÑÏÖØµÄÎÊÌâ¡£Õâ¸öÎÊÌâ×îÔçÔÚ JavaScript ÖгôÃûÕÑÖø£¬ÄǾÍÊǻص÷µØÓü (callback hell)¡£

ÊÔÏëÒ»ÏÂÎÒÃÇÈç¹ûÓÐһϵÁÐÐèÒªÒÀ´Î½øÐеÄÍøÂç²Ù×÷£ºÏȽøÐеǼ£¬È»ºóʹÓ÷µ»ØµÄ token »ñÈ¡Óû§ÐÅÏ¢£¬½ÓÏÂÀ´Í¨¹ýÓû§ ID »ñÈ¡ºÃÓÑÁÐ±í£¬×îºó¶Ôij¸öºÃÓѵãÔÞ¡£Ê¹Óô«Í³µÄ±Õ°ü·½Ê½£¬Õâ¶Î´úÂë»áÊÇÕâÑù£º

ÕâÒѾ­ÊÇʹÓÃÁËÎ²Ëæ±Õ°üÌØÐÔ¼ò»¯ºóµÄ´úÂëÁË£¬Èç¹ûʹÓÃÍêÕûµÄ±Õ°üÐÎʽµÄ»°£¬Äã»á¿´µ½Ò»´ó¶Ñ }) ¶ÑµþÆðÀ´¡£else ·¾¶Éϼ¸ºõ²»¿ÉÄÜÈ·¶¨¶ÔÓ¦¹ØÏµ£¬¶ø¶ÔÓڳɹ¦µÄ´úÂë·¾¶À´Ëµ£¬ÄãÒ²ÐèÒªºÜ¶à¶îÍâµÄ¾«Á¦À´Àí½âÕâЩ´úÂë¡£Ò»µ©ÕâÖÖ»ùÓÚ±Õ°üµÄ»Øµ÷Ì«¶à£¬²¢Ç¶ÌׯðÀ´£¬ÔĶÁËüÃǵÄʱºò¾ÍºÃËÆÉíÏݵØÓü¡£

²»ÐÒµÄÊÇ£¬ÔÚ Cocoa ¿ò¼ÜÖÐÎÒÃÇËÆºõ¶Ô´Ëû̫¶àºÃ°ì·¨¡£²»¹ýÎÒÃÇȷʵÓкܶ෽·¨À´½â¾ö»Øµ÷µØÓüµÄÎÊÌ⣬ÆäÖÐ×î³É¹¦µÄÓ¦¸ÃÊÇ Promise »òÕß Future µÄ·½°¸¡£

Promise/Future

ÔÚÉîÈë Promise »ò Future ֮ǰ£¬ÎÒÃÇÏÈÀ´½«ÉÏÃæµÄ»Øµ÷×öһЩÕûÀí¡£¿ÉÒÔ¿´µ½£¬ËùÓеÄÇëÇóÔڻص÷ʱ¶¼°üº¬ÁËÁ½¸öÊäÈëÖµ£¬Ò»¸öÊÇÏñtoken£¬user ÕâÑùÎÒÃǽÓÏÂÀ´»áʹÓõ½µÄ½á¹û£¬ÁíÒ»¸öÊÇ´ú±í´íÎóµÄ err¡£ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö·ºÐÍÀàÐÍÀ´´ú±íËüÃÇ£º

ÖØ¹¹ send ·½·¨½ÓÊյĻص÷ÀàÐͺó£¬ÉÏÃæµÄ API µ÷ÓþͿÉÒÔ±äΪ£º

¿´ÆðÀ´²¢Ã»ÓÐʲô¸ÄÉÆ£¬¶Ôô£¿ÎÒÃÇÖ»²»¹ýʹÓÃÒ»¶Ñ ({}) µÄµØÓü»»³ÉÁË switch...case µÄµØÓü¡£µ«ÊÇ£¬ÎÒÃÇÈç¹û½« request °üװһϣ¬Çé¿ö¾Í»áÍêÈ«²»Í¬¡£

ÎÒÃÇÕâÀïûÓиø³ö Promise µÄ¾ßÌåʵÏÖ£¬¶øÖ»ÊǸø³öÁ˸ÅÄîÐÔµÄ˵Ã÷¡£Promise ÊÇÒ»¸ö·ºÐÍÀàÐÍ£¬ËüµÄ³õʼ»¯·½·¨½ÓÊÜÒ»¸öÒÔ fulfill ºÍreject ×÷Ϊ²ÎÊýµÄº¯Êý×÷Ϊ²ÎÊý (Ò»¿ªÊ¼Õâ¿ÉÄÜÓеãÞÖ¿Ú£¬Äã¿ÉÒÔ½áºÏ´úÂëÔÙ¶ÁÒ»´Î)¡£Õâ¸öÀàÐÍÀﻹÌṩÁË then ºÍ catch ·½·¨£¬then ·½·¨µÄ²ÎÊýÊÇÁíÒ»¸ö±Õ°ü£¬ÔÚ fulfill ±»µ÷ÓÃʱ£¬ÎÒÃÇ¿ÉÒÔÖ´ÐÐÕâ¸ö±Õ°ü£¬²¢·µ»ØÐ嵀 Promise (Ö®ºó»á¿´µ½¾ßÌåµÄʹÓÃÀý×Ó)£º¶øÔÚ reject ±»µ÷ÓÃʱ£¬Í¨¹ý catch ·½·¨ÖжÏÕâ¸ö¹ý³Ì¡£

ÔÚ½ÓÏÂÀ´µÄ Request µÄÀ©Õ¹ÖУ¬ÎÒÃǶ¨ÒåÁËÒ»¸ö·µ»Ø Promise µÄ¼ÆËãÊôÐÔ£¬Ëü½«³õʼ»¯Ò»¸öÄÚÈÝÀàÐÍΪ Response µÄ Promise (ÕâÀïµÄResponse ÊǶ¨ÒåÔÚ Request ЭÒéÖеĴú±í¸ÃÇëÇó¶ÔÓ¦µÄÏìÓ¦µÄÀàÐÍ£¬ÏëÁ˽â¸ü¶àÏà¹ØµÄÄÚÈÝ£¬¿ÉÒÔ¿´¿´ÎÒ֮ǰµÄһƪʹÓÃÃæÏòЭÒé±à³ÌµÄÎÄÕÂ)¡£ÎÒÃÇÔÚ .success ʱµ÷Óà fulfill£¬ÔÚ .failure ʱµ÷Óà reject¡£

ÏÖÔÚ£¬ÉÏÃæµÄ»Øµ÷µØÓü¿ÉÒÔÓà then ºÍ catch µÄÐÎʽ½øÐÐչƽÁË£º

Promise ±¾ÖÊÉϾÍÊÇÒ»¸ö¶Ô±Õ°ü»òÕß˵ Result ÀàÐ͵ķâ×°£¬Ëü½«Î´À´¿ÉÄܵĽá¹ûËù¶ÔÓ¦µÄ±Õ°üÏÈ´æ´¢ÆðÀ´£¬È»ºóµ±È·ÊµµÃµ½½á¹û (±ÈÈçÍøÂçÇëÇó·µ»Ø) µÄʱºò£¬ÔÙÖ´ÐжÔÓ¦µÄ±Õ°ü¡£Í¨¹ýʹÓà then£¬ÎÒÃÇ¿ÉÒÔ±ÜÃâ±Õ°üµÄÖØµþǶÌ×£¬¶øÊÇʹÓõ÷ÓÃÁ´µÄ·½Ê½½«Òì²½²Ù×÷´®½ÓÆðÀ´¡£Future ºÍPromise ÆäʵÊÇͬÑù˼ÏëµÄ²»Í¬ÃüÃû£¬Á½Õß»ù±¾Ö¸´úµÄÊÇÒ»¼þʶù¡£ÔÚ Swift ÖУ¬ÓÐһЩ·â×°µÃºÜºÃµÄµÚÈý·½¿â£¬¿ÉÒÔÈÃÎÒÃÇÒÔÕâÑùµÄ·½Ê½À´Êéд´úÂ룬PromiseKit ºÍ BrightFutures ¾ÍÊÇÆäÖеÄٮٮÕߣ¬ËüÃÇȷʵÄܰïÖú±ÜÃâ»Øµ÷µØÓüµÄÎÊÌ⣬ÈÃǶÌ×µÄÒì²½´úÂë±äµÃÕû½à¡£

async/await£¬¡°´®ÐС±Ä£Ê½µÄÒì²½±à³Ì

ËäÈ» Promise/Future µÄ·½Ê½Äܽâ¾öÒ»²¿·ÖÎÊÌ⣬µ«ÊÇÎÒÃÇ¿´¿´ÉÏÃæµÄ´úÂ룬ÒÀÈ»Óв»ÉÙÎÊÌâ¡£

1.ÎÒÃÇÓÃÁ˺ܶಢ²»Ö±¹ÛµÄ²Ù×÷£¬¶ÔÓÚÿ¸ö request£¬ÎÒÃǶ¼Éú³ÉÁ˶îÍâµÄ Promise£¬²¢Óà then ´®Áª¡£ÕâЩÆäʵ¶¼ÊÇÄ£°å´úÂ룬Ӧ¸Ã¿ÉÒÔ±»¸üºÃµØ½â¾ö¡£

2.¸÷¸ö then ±Õ°üÖеÄÖµÖ»ÔÚ×Ô¼º¹Ì¶¨µÄ×÷ÓÃÓòÖÐÓÐЧ£¬ÕâÓÐʱºòºÜ²»·½±ã¡£±ÈÈçÈç¹ûÎÒÃÇµÄ LikeFriend ÇëÇóÐèҪͬʱ·¢Ë͵±Ç°Óû§µÄ token µÄ»°£¬ÎÒÃÇÖ»ÄÜÔÚ×îÍâ²ãÌí¼ÓÁÙʱ±äÁ¿À´³ÖÓÐÕâЩ½á¹û£º

3.Swift ÄÚ½¨µÄ throw µÄ´íÎó´¦Àí·½Ê½²¢²»ÄܺܺõغÍÕâÀïµÄ Result ºÍ catch { error in ... } µÄ·½Ê½ºÏ×÷¡£Swift throw ÊÇÒ»ÖÖͬ²½µÄ´íÎó´¦Àí·½Ê½£¬Èç¹ûÏëÒªÔÚÒì²½ÊÀ½çÖÐʹÓÃÕâÖֵϰ£¬»áÏԵøñ¸ñ²»Èë¡£Óï·¨ÉÏÓв»ÉÙÀí½âµÄÀ§ÄÑ£¬´úÂëÒ²»áѸËÙ±äµÃÊ®·Ö³óª¡£

Èç¹û´ÓÓïÑÔ²ãÃæ×ÅÊֵϰ£¬ÕâЩÎÊÌâ¶¼ÊÇ¿ÉÒÔ±»½â¾öµÄ¡£Èç¹û¶Ô΢Èí¼¼ÊõÕ»ÓÐËù¹ØÐĵÄͬѧӦ¸ÃÖªµÀ£¬ÔçÔÚ 2012 Äê C# 5.0 ·¢²¼Ê±£¬¾Í°üº¬ÁËÒ»¸öÈÃÒµ½ç¾ªÎªÌìÈ˵ÄÌØÐÔ£¬ÄǾÍÊÇ async ºÍ await ¹Ø¼ü×Ö¡£ÕâÁ½¸ö¹Ø¼ü×Ö¿ÉÒÔÈÃÎÒÃÇÓÃÀàËÆÍ¬²½µÄÊéд·½Ê½À´Ð´Òì²½´úÂ룬ÕâÈÃ˼άģÐͱäµÃÊ®·Ö¼òµ¥¡£Swift 5 ÖÐÓÐÍûÒýÈëÀàËÆµÄÓï·¨½á¹¹£¬Èç¹ûÎÒÃÇÓÐ async/await£¬ÎÒÃÇÉÏÃæµÄÀý×Ó½«»á±ä³ÉÕâÑùµÄÐÎʽ£º

×¢Ò⣬ÒÔÉÏ´úÂëÊǸù¾ÝÏÖÔÚ Swift Óï·¨£¬¶ÔÈç¹û´æÔÚ async ºÍ await ʱÓïÑÔµÄÐÎʽµÄÍÆ²â¡£ËäÈ»Õâ²»´ú±í½ñºó Swift ÖÐÒì²½±à³ÌÄ£Ð;ÍÊÇÕâÑù£¬»òÕß˵ async ºÍ await ¾ÍÊÇÕâÑùʹÓ㬵«ÊÇÓ¦¸Ã´ú±íÁËÒ»¸ö±»ÆäËûÓïÑÔÑéÖ¤¹ýµÄ¿ÉÐз½Ïò¡£

°´ÕÕ×¢Ê͵ıàºÅ£¬½øÐÐһЩ¼òµ¥µÄ˵Ã÷£º

Õâ¾ÍÊÇÎÒÃÇͨ³£µÄ @IBAction£¬µã»÷ºóÖ´ÐÐ doSomething¡£
doSomething ±» async ¹Ø¼ü×ÖÐÞÊΣ¬±íʾÕâÊÇÒ»¸öÒì²½·½·¨¡£async ¹Ø¼ü×ÖËù×öµÄÊÂÇéÖ»ÓÐÒ»¼þ£¬ÄǾÍÊÇÔÊÐíÔÚÕâ¸ö·½·¨ÄÚʹÓà await ¹Ø¼ü×ÖÀ´µÈ´ýÒ»¸ö³¤Ê±¼ä²Ù×÷Íê³É¡£ÔÚÕâ¸ö·½·¨ÀïµÄÓï¾ä½«±»ÒÔͬ²½·½Ê½Ö´ÐУ¬Ö±µ½Óöµ½µÚÒ»¸ö await¡£¿ØÖÆÌ¨½«»á´òÓ¡ "Doing something..."¡£
Óöµ½µÄµÚÒ»¸ö await¡£´ËʱÕâ¸ö doSomething ·½·¨½«½øÈëµÈ´ý״̬£¬¸Ã·½·¨½«»á¡°·µ»Ø¡±£¬Ò²¼´À뿪ջÓò¡£½ÓÏÂÀ´ bunttonPressed ÖÐdoSomething µ÷ÓÃÖ®ºóµÄÓï¾ä½«±»Ö´ÐУ¬¿ØÖÆÌ¨´òÓ¡ "Button Pressed"¡£
token£¬user£¬friends ºÍ result ½«±»ÒÀ´Î await Ö´ÐУ¬Ö±µ½»ñµÃ×îÖÕ½á¹û£¬²¢½øÐÐ updateUI¡£
ÀíÂÛÉÏ await ¹Ø¼ü×ÖÔÚÓïÒåÉÏÓ¦¸Ã°üº¬ throws£¬ËùÒÔÎÒÃÇÐèÒª½«ËüÃǰü¹üÔÚ do...catch ÖУ¬¶øÇÒ¿ÉÒÔʹÓà Swift ÄÚ½¨µÄÒì³£´¦Àí»úÖÆÀ´¶ÔÇëÇó²Ù×÷Öз¢ÉúµÄ´íÎó½øÐв¶»ñºÍ´¦Àí¡£»»¾ä»°Ëµ£¬ÎÒÃÇÈç¹û¶Ô´íÎ󲻸ÐÐËȤ£¬Ò²¿ÉÒÔʹÓÃÀàËÆ try? ºÍ try! µÄ
¶ÔÓÚ Request£¬ÎÒÃÇÐèÒªÌí¼Ó async °æ±¾µÄ·¢ËÍÇëÇóµÄ·½·¨¡£dataTask µÄ resumeAsync ·½·¨ÊÇÔÚ Foundation ÖÐÕë¶ÔÄÚ½¨Òì²½±à³ÌËùÖØÐ´µÄ°æ±¾¡£ÎÒÃÇÔڴ˵ȴýËüµÄ½á¹û£¬È»ºó½«½á¹û½âÎöΪ model ºó·µ»Ø¡£
ÎÒÃÇÉÏÃæÒѾ­Ëµ¹ý£¬¿ÉÒÔ½« Promise ¿´×÷ÊÇ¶Ô Result µÄ·â×°£¬¶øÕâÀïÎÒÃÇÒÀÈ»¿ÉÒÔÀà±È½øÐÐÀí½â£¬½« async ¿´×÷ÊÇ¶Ô Promise µÄ·â×°¡£¶ÔÓÚsendAsync ·½·¨£¬ÎÒÃÇÍêÈ«¿ÉÒÔ½«ËüÀí½â·µ»Ø Promise£¬Ö»²»¹ýÅäºÏ await£¬Õâ¸ö Promise ½«Ö±½ÓÒÔͬ²½µÄ·½Ê½±»½â°üΪ½á¹û¡£(»òÕß˵£¬await ÊÇÕâÑùÒ»¸ö¹Ø¼ü×Ö£¬Ëü¿ÉÒԵȴý Promise Íê³É£¬²¢»ñÈ¡ËüµÄ½á¹û¡£)

²»½öÔÚÍøÂçÇëÇóÖпÉÒÔʹÓ㬶ÔÓÚËùÓÐµÄ I/O ²Ù×÷£¬Cocoa Ó¦µ±Ò²»áÌṩһÌ×¶ÔÓ¦µÄÒì²½ API¡£ÉõÖÁÓÚ¶ÔÓڵȴýÓû§²Ù×÷ºÍÊäÈ룬»òÕߵȴýij¸ö¶¯»­µÄ½áÊø£¬¶¼ÊÇ¿ÉÒÔʹÓà async/await µÄDZÔÚ³¡¾°¡£Èç¹ûÄã¶ÔÏìӦʽ±à³ÌÓÐËùÁ˽âµÄ»°£¬²»ÄÑ·¢ÏÖ£¬ÆäʵÏìӦʽ±à³ÌÏëÒª½â¾öµÄ¾ÍÊÇÒì²½´úÂëÄÑÒÔά»¤µÄÎÊÌ⣬¶øÔÚʹÓà async/await ºó£¬²¿·ÖµÄÒì²½´úÂë¿ÉÒÔ±äΪÒÔͬ²½ÐÎʽÊéд£¬Õâ»áÈôúÂëÊéдÆðÀ´¼òµ¥ºÜ¶à¡£

Swift µÄ async ºÍ await ºÜ¿ÉÄܽ«»áÊÇ»ùÓÚ Coroutine ½øÐÐʵÏֵġ£²»¹ýÒ²ÓпÉÄÜºÍ C# ÀàËÆ£¬±àÒëÆ÷ͨ¹ý½« async ºÍ await µÄ´úÂë±àÒëΪ´øÓÐ״̬»úµÄƬ¶Î£¬²¢½øÐе÷¶È¡£Swift 5 µÄÔ¤¼Æ·¢²¼Ê±¼ä»áÊÇ 2018 Äêµ×£¬ËùÒÔÏÖÔÚ̸ÂÛÕâЩ¼¼Êõϸ½Ú¿ÉÄÜ»¹ÎªÊ±¹ýÔç¡£

²ÎÓëÕß (actor) Ä£ÐÍ

½²Á˰ëÌì async ºÍ await£¬ËüÃÇËùÒª½â¾öµÄÊÇÒì²½±à³ÌµÄÎÊÌâ¡£¶ø´ÓÒì²½±à³Ìµ½²¢Ðбà³Ì£¬ÎÒÃÇ»¹ÐèÒªÒ»²½£¬ÄǾÍÊǽ«¶à¸öÒì²½²Ù×÷×éÖ¯ÆðÀ´Í¬Ê±½øÐС£µ±È»£¬ÎÒÃÇ¿ÉÒÔ¼òµ¥µØÍ¬Ê±µ÷Óöà¸ö async ·½·¨À´½øÐв¢ÐÐÔËË㣬»òÕßÊÇʹÓÃijЩÏñÊÇ GCD Àï group Ö®ÀàµÄÌØÊâÓï·¨À´½«¸´Êý¸ö async´ò°ü·ÅÔÚÒ»Æð½øÐе÷Óᣵ«ÊDz»ÂÛºÎÖÖ·½Ê½£¬¶¼»áÃæÁÙÒ»¸öÎÊÌ⣬ÄǾÍÊÇÕâÌ×·½Ê½Ê¹ÓõÄÊÇÃüÁîʽ (imperative) µÄÓï·¨£¬¶ø·ÇÃèÊöÐ﵀ (declarative)£¬Õ⽫µ¼ÖÂÀ©Õ¹ÆðÀ´Ïà¶ÔÀ§ÄÑ¡£

²¢Ðбà³ÌÏà¶Ô¸´ÔÓ£¬¶øÇÒÓëÈËÀàÌìÉúµÄ˼¿¼·½Ê½ÏàÎ¥±³£¬ËùÒÔÎÒÃÇÏ£Íû¾¡¿ÉÄÜÈò¢Ðбà³ÌµÄÄ£Ðͱ£³Ö¼òµ¥£¬Í¬Ê±±ÜÃâÖ±½ÓÓëÏ̻߳òÕßµ÷¶ÈÕâÀàÊÂÎñ´ò½»µÀ¡£»ùÓÚÕâЩ¿¼ÂÇ£¬Swift ºÜ¿ÉÄÜ»á²Î¿¼ Erlang ºÍ AKKA ÖÐÒѾ­ºÜ³É¹¦µÄ²ÎÓëÕßÄ£ÐÍ (actor model) µÄ·½Ê½ÊµÏÖ²¢Ðбà³Ì£¬ÕâÑù¿ª·¢Õß½«¿ÉÒÔʹÓÃĬÈϵķֲ¼Ê½·½Ê½ºÍÃèÊöÐÔµÄÓïÑÔÀ´½øÐв¢ÐÐÈÎÎñ¡£

Ëùν²ÎÓëÕߣ¬ÊÇÒ»ÖÖ³ÌÐòÉϵijéÏó¸ÅÄËü±»ÊÓΪ²¢·¢ÔËËãµÄ»ù±¾µ¥Ôª¡£²ÎÓëÕßÄÜ×öµÄÊÂÇé¾ÍÊǽÓÊÕÏûÏ¢£¬²¢ÇÒ»ùÓÚÊÕµ½µÄÏûÏ¢×öijÖÖÔËËã¡£ÕâºÍÃæÏò¶ÔÏóµÄÏë·¨ÓÐÏàËÆÖ®´¦£¬Ò»¸ö¶ÔÏóÒ²½ÓÊÕÏûÏ¢ (»òÕß˵£¬½ÓÊÜ·½·¨µ÷ÓÃ)£¬²¢ÇÒ¸ù¾ÝÏûÏ¢ (±»µ÷Óõķ½·¨) ×÷³öÏìÓ¦¡£ËüÃÇÖ®¼ä×î´óµÄ²»Í¬ÔÚÓÚ£¬²ÎÓëÕßÖ®¼äÓÀÔ¶Ï໥¸ôÀ룬ËüÃDz»»á¹²Ïíij¿éÄÚ´æ¡£Ò»¸ö²ÎÓëÕßÖеÄ״̬ÓÀÔ¶ÊÇ˽Óеģ¬Ëü²»Äܱ»ÁíÒ»¸ö²ÎÓëÕ߸ı䡣

ºÍÃæÏò¶ÔÏóÊÀ½çÖС°ÍòÎï½Ô¶ÔÏó¡±µÄ˼ÏëÏàͬ£¬²ÎÓëÕßģʽÀËùÓеĶ«Î÷Ò²¶¼ÊDzÎÓëÕß¡£µ¥¸öµÄ²ÎÓëÕßÄÜÁ¦Ê®·ÖÓÐÏÞ£¬²»¹ýÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö²ÎÓëÕߵġ°¹ÜÀíÕß¡±£¬»òÕß½Ð×ö actor system£¬ËüÔÚ½ÓÊÕµ½Ìض¨ÏûϢʱ¿ÉÒÔ´´½¨ÐµIJÎÓëÕߣ¬²¢ÏòËüÃÇ·¢ËÍÏûÏ¢¡£ÕâЩеIJÎÓëÕß½«Êµ¼Ê¸ºÔðÔËËã»òÕß²Ù×÷£¬ÔÚ½Óµ½ÏûÏ¢ºó¸ù¾Ý×ÔÉíµÄÄÚ²¿×´Ì¬½øÐй¤×÷¡£ÔÚ Swift 5 ÖУ¬¿ÉÄÜ»áÓÃÏÂÃæµÄ·½Ê½À´¶¨ÒåÒ»¸ö²ÎÓëÕߣº

ÔÙ´Î×¢Ò⣬ÕâЩ´úÂëÖ»ÊÇ¶Ô Swift 5 ÖпÉÄܳöÏֵIJÎÓëÕßģʽµÄÒ»ÖÖ²ÂÏë¡£×îºóµÄʵÏֿ϶¨»áºÍÕâÓÐËùÇø±ð¡£²»¹ýÈç¹û Swift ÖÐÒª¼ÓÈë²ÎÓëÕߣ¬Ó¦¸Ã»áºÍÕâÀïµÄ±íÊöÀàËÆ¡£

ÕâÀïµÄ Message ÊÇÎÒÃǶ¨ÒåµÄÏûÏ¢ÀàÐÍ¡£
ʹÓà actor ¹Ø¼ü×ÖÀ´¶¨ÒåÒ»¸ö²ÎÓëÕßÄ£ÐÍ£¬ËüÆäÖаüº¬ÁËÄÚ²¿×´Ì¬ºÍÒì²½²Ù×÷£¬ÒÔ¼°Ò»¸öÒþʽµÄ²Ù×÷¶ÓÁС£
¶¨ÒåÁËÕâ¸ö actor ÐèÒª½ÓÊÕµÄÏûÏ¢ºÍÐèÒª×÷³öµÄÏìÓ¦¡£
´´½¨ÁËÒ»¸ö actor system (ActorSystem ÕâÀïûÓиø³öʵÏÖ£¬¿ÉÄÜ»á°üº¬ÔÚ Swift ±ê×¼¿âÖÐ)¡£È»ºó´´½¨ÁËÒ»¸ö NetworkRequestHandler ²ÎÓëÕߣ¬²¢ÏòËü·¢ËÍÒ»ÌõÏûÏ¢¡£
Õâ¸ö²ÎÓëÕß·â×°ÁËÒ»¸öÒì²½·½·¨ÒÔ¼°Ò»¸öÄÚ²¿×´Ì¬£¬ÁíÍ⣬ÒòΪ¸Ã²ÎÓëÕß»áʹÓÃÒ»¸ö×Ô¼ºµÄ DispatchQueue ÒÔ±ÜÃâºÍÆäËûÏ̹߳²Ïí״̬¡£Í¨¹ý actor system ½øÐд´½¨£¬²¢ÔÚ½ÓÊÕµ½Ä³¸öÏûÏ¢ºóÖ´ÐÐÒì²½µÄÔËËã·½·¨£¬ÎÒÃǾͿÉÒÔºÜÈÝÒ×µØÐ´³ö²¢Ðд¦ÀíµÄ´úÂ룬¶ø²»±Ø¹ØÐÄËüÃǵÄÄÚ²¿×´Ì¬ºÍµ÷¶ÈÎÊÌâÁË¡£ÏÖÔÚ£¬Äã¿ÉÒÔͨ¹ý ActorSystem À´´´½¨ºÜ¶à²ÎÓëÕߣ¬È»ºó·¢ËͲ»Í¬ÏûÏ¢¸øËüÃÇ£¬²¢½øÐи÷×ԵIJÙ×÷¡£²¢Ðбà³Ì±äµÃǰËùδÓеļòµ¥¡£

²ÎÓëÕßģʽÏà±ÈÓÚ´«Í³µÄ×Ô¼ºµ÷¶ÈÓÐÁ½¸öÏÔÖøµÄÓŵ㣺

Ê×ÏÈ£¬ÒòΪ²ÎÓëÕßÖ®¼äµÄͨѶÊÇÏûÏ¢·¢ËÍ£¬ÕâÒâζ×Ų¢ÐÐÔËËã²»±Ø±»¾ÖÏÞÔÚÒ»¸ö½ø³ÌÀÉõÖÁ²»±Ø¾ÖÏÞÔÚһ̨É豸Àï¡£Ö»Òª±£Ö¤ÏûÏ¢Äܹ»±»·¢ËÍ (±ÈÈçʹÓà IPC »òÕß DMA)£¬Äã¾ÍÍêÈ«¿ÉÒÔʹÓ÷ֲ¼Ê½µÄ·½Ê½£¬Ê¹ÓöàÖÖÉ豸 (¶ą̀µçÄÔ£¬»òÕß¶à¸ö GPU) ½øÐв¢ÐвÙ×÷£¬Õâ´øÀ´µÄÊÇÎÞÏÞ¿ÉÄܵÄÀ©Õ¹ÐÔ¡£

ÁíÍ⣬ÓÉÓÚ²ÎÓëÕßÖ®¼ä¿ÉÒÔ·¢ËÍÏûÏ¢£¬ÄÇЩ²Ù×÷·¢ÉúÒì³£µÄ²ÎÓëÕßÓлú»á֪ͨ system ×Ô¼ºµÄ״̬£¬¶ø actor system Ò²¿ÉÒÔ¸ù¾ÝÕâ¸ö״̬À´ÖØÖÃÕâЩ³öÎÊÌâµÄ²ÎÓëÕߣ¬»òÕßÉõÖÁÊÇÎÞÊÓËüÃDz¢´´½¨ÐµIJÎÓëÕß¼ÌÐøÈÎÎñ¡£ÕâʹµÃÕû¸ö²ÎÓëÕßϵͳӵÓС°×ÔÓú¡±µÄÄÜÁ¦£¬ÔÚ´«Í³²¢Ðбà³ÌÖÐÏëÒª´¦ÀíÕâ¼þÊÂÇéÊǷdz£À§Äѵ쬶ø²ÎÓëÕßÄ£Ð͵ÄϵͳµÃÒæÓÚ´Ë£¬¿ÉÒÔ×î´óÏ޶ȱ£ÕÏϵͳµÄÎȶ¨ÐÔ¡£

ÕâЩ¶«Î÷ÓÐʲôÓÃ

Á½ÄêÏÂÀ´£¬Swift ÒѾ­Ö¤Ã÷ÁË×Ô¼ºÊÇÒ»Ãŷdz£ÓÅÐãµÄ app ÓïÑÔ¡£¼´Ê¹ Xcode ÿÈÕŰÎÒǧ°Ù±é£¬µ«ÊÇÏÖÔÚÈÃÎÒ»ØÈ¥Ð´ Objective-C µÄ»°£¬ÎÒ´ÓÄÚÐÄÊǾø¶Ô¿¹¾ÜµÄ¡£Swift µÄÒ°ÐIJ»½öÓÚ´Ë£¬´Ó Swift µÄ¿ªÔ´ºÍ½ø»¯·½Ïò£¬ÎÒÃǺÜÈÝÒ׿´³öÕâÃÅÓïÑÔÏ£ÍûÔÚ·þÎñÆ÷¶ËÒ²ÓÐËù½¨Ê÷¡£¶øÄÚ½¨µÄÒì²½Ö§³ÖÒÔ¼°²ÎÓëÕßģʽµÄ²¢Ðбà³Ì£¬ÎÞÒÉ»áΪ Swift ÔÚ·þÎñÆ÷¶ËµÄÔËÓÃÌí¼ÓºñÖØµÄíÀÂë¡£Ò첽ģÐͶÔд app Ò²»áÓÐËù°ïÖú£¬¸ü¼ò»¯µÄ¿ØÖÆÁ÷³ÌÒÔ¼°Òþ²ØÆðÀ´µÄÏß³ÌÇл»£¬»áÈÃÎÒÃÇд³ö¸ü¼Ó¼òÃ÷ÓÅÑŵĴúÂë¡£

C# µÄ async/await Ôø¾­Îª¿ª·¢ÕßÃÇ´øÀ´Ò»¹ÉÇåÁ÷£¬Elixir »òÕß˵ Erlang ¿ÉÒÔ˵ÊÇÊÀ½çÉÏ×îÓÅÐãµÄ²¢Ðбà³ÌÓïÑÔ£¬JVM É쵀 AKKA Ò²ÕýÔÚÖ§³Å×ÅÎÞÊýµÄÒÚ¼¶·þÎñ¡£ÎÒºÜºÃÆæµ± Swift Óöµ½ÕâÒ»ÇеÄʱºò£¬ËüÃÇÖ®¼äµÄ»¯Ñ§·´Ó¦»á±Å·¢³öÔõÑùµÄ»ð»¨¡£ËäȻÿÌ컹ÔÚ Swift 3 µÄÊÀ½çÖÐÕõÔú£¬µ«ÊÇÎÒÏëÎÒµÄÐÄÒѾ­·ÉÔ¾µ½ Swift 5 µÄ²¢ÐÐÊÀ½çÖÐÈ¥ÁË¡£

   
2413 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ