From d404d455a63b6ee9025f338e6f5fe4e048c0a411 Mon Sep 17 00:00:00 2001 From: ostrichb Date: Sat, 12 Nov 2022 03:27:45 +0000 Subject: [PATCH] added answers --- answers/Task1.playground/Contents.swift | 30 +++++ .../Task1.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 13506 bytes answers/Task1.playground/timeline.xctimeline | 10 ++ .../xcschemes/xcschememanagement.plist | 16 +++ .../Contents.swift | 22 ++++ .../timeline.xctimeline | 10 ++ .../Task2.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 15764 bytes .../xcschemes/xcschememanagement.plist | 16 +++ answers/Task3.playground/Contents.swift | 21 ++++ .../Task3.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 13013 bytes answers/Task3.playground/timeline.xctimeline | 26 +++++ answers/Task4.playground/Contents.swift | 91 +++++++++++++++ .../Task4.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 15361 bytes answers/Task4.playground/timeline.xctimeline | 26 +++++ .../xcschemes/xcschememanagement.plist | 16 +++ answers/Task5.playground/Contents.swift | 105 ++++++++++++++++++ .../Task5.playground/contents.xcplayground | 4 + .../contents.xcworkspacedata | 7 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 16683 bytes answers/Task5.playground/timeline.xctimeline | 30 +++++ 28 files changed, 474 insertions(+) create mode 100644 answers/Task1.playground/Contents.swift create mode 100644 answers/Task1.playground/contents.xcplayground create mode 100644 answers/Task1.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 answers/Task1.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 answers/Task1.playground/timeline.xctimeline create mode 100644 answers/Task1.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift create mode 100644 answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline create mode 100644 answers/Task2.playground/contents.xcplayground create mode 100644 answers/Task2.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 answers/Task2.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 answers/Task2.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 answers/Task3.playground/Contents.swift create mode 100644 answers/Task3.playground/contents.xcplayground create mode 100644 answers/Task3.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 answers/Task3.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 answers/Task3.playground/timeline.xctimeline create mode 100644 answers/Task4.playground/Contents.swift create mode 100644 answers/Task4.playground/contents.xcplayground create mode 100644 answers/Task4.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 answers/Task4.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 answers/Task4.playground/timeline.xctimeline create mode 100644 answers/Task4.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 answers/Task5.playground/Contents.swift create mode 100644 answers/Task5.playground/contents.xcplayground create mode 100644 answers/Task5.playground/playground.xcworkspace/contents.xcworkspacedata create mode 100644 answers/Task5.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 answers/Task5.playground/timeline.xctimeline diff --git a/answers/Task1.playground/Contents.swift b/answers/Task1.playground/Contents.swift new file mode 100644 index 0000000..e845d5c --- /dev/null +++ b/answers/Task1.playground/Contents.swift @@ -0,0 +1,30 @@ +import Foundation + +func printValue(_ n: Int) { + print("The value of n is \(String(n))") +} + +func countLength(_ n: String) { + print("The length of n is \(n.count)") +} + +func varProcessor(_ n: Any) { + let nInt = n as? Int ?? 0 // 如果n是整形数,nInt将会被赋予n的值 + let nString = n as? String ?? "" // 如果n是字符串,nString将会被赋予n的值 + switch n{ + case is Int: + // 如果n是整形,这里的代码将会被执行 + printValue(nInt) + case is String: + // 如果n是字符串,这里的代码将会被执行 + countLength(nString) + default: + print("An error occurred.") + } +} + +let test: [Any] = [0, 2, 0.2, "Hello"] + +for item in test { + varProcessor(item) +} diff --git a/answers/Task1.playground/contents.xcplayground b/answers/Task1.playground/contents.xcplayground new file mode 100644 index 0000000..1c968e7 --- /dev/null +++ b/answers/Task1.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/answers/Task1.playground/playground.xcworkspace/contents.xcworkspacedata b/answers/Task1.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/answers/Task1.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/answers/Task1.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate b/answers/Task1.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..7534f1c4d4a68537671e1ea9e5b3e152bfc67eef GIT binary patch literal 13506 zcmds7d0bOh_P_VO1R;d*vXBJa5|R*9f(bj;g?dinu?srg$ht1szr5Z zHkyO#(OfhS%|{E+VzdM;MaxhJ>O^ahAFV|}6h%E~GunbE>PKgxbI`fyB6Kmj1nojs zpsUaxG=K)t!{`z8D0&P%j-EhIqNmW)=o$1ZdJY{#&!d;nVe}e$2fd5lL+_&x(1++t z^cDIVeS`jmen3B?UogQcoQ}0P6KCNG*o4j4j&pGyc48MU#^rbho{6h)6L#Zf+=5&2 zV!Q+|#a`To+i@rE#i!!a@mY8~J{zBpFTsDnJMras7rqMb!F%z|_%3`eeh@!|AI6X4 zzv8#>-|*Y`@Aw`3E`ATck3Ya4;*apB_-p(P{uUp@KN60}h@2#o6rv!hL`!regXoEY zj3whpE}29olPM&Rl#y~WjhsTJlPXe8=8z`hCe36O@u2U?YSKYE$vP4uXOL~=OmY_4 zPR=IhkaNj-UuiE`u|2R?f!daCR=2o5W4#rf@Fq6mB{r^xbxQu zeUWAG8RN88YkR;Oi3}n&(ojOVL8L<&R7M}BCJ%3Qx{3>GYs!ipuJWQPM^SZojiao_ zRqiM)udXgEEUhbZ6_$8-U42dM;!t>9q}$sr)P&l5x`bdfzHk=GMw72YW6?M?9!)?K zkqMcpoF>sRG?}JQ1x>vUS&$Xkpo1OdB0E*mH2NTPaM29-x36Ne`-8qvZ(Z2iC3yIm zBbRITwpE9M(Qqgb5W=34qVjTAO@_%91jt%jMy7 zM@}G3?P+i~36W?h>}?AOqJY(Sqh1d`5xQ2kM?pdp2OPa3pOe@gG*o%Ri@lLnf5Z>d zEcQp&xc$M-fB-EXK6AKZC=_V(hU?=UJ-l(aO`K#zlVS7bf|8;D(IRS~Mw&T<+^89~&@7ruC$YVn zmb8a_LOzV2=a1$m7Rpat4{X#e1YkpgFVPB`bapt@(=9cC-i^dpT#iy~vB&P&@L{iPTK9;T=}i)%gQaAuKXSRo?>G1?Xm2ZN4`WO{~Nodw6|I zu;ZkijnW)~ucdzUJn{XkLjk1Uvxk}vqY&yw>rr@_B%ncH{Uy>@A+n;uUE>F?3KMD4Gt5mqzW!9fCW9j`1}%pp8gBfO@HA0QFHT6LiLZCmnMbRL53yDmu-> zX93}vbTl%f)+BU?g$Rhbm+gY)P}@Q^UfUKoc$jc9xxqMLsXr=oi6;eK0X-9~Y;PAL z5y1!2C9I0HGqG(9MS!J3!IhENwbjFz$ljzhwf69s

Fdw>P?GDJTG8;~al5I;co( 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 + + + + + + diff --git a/answers/Task1.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist b/answers/Task1.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..7fdf092 --- /dev/null +++ b/answers/Task1.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,16 @@ + + + + + SchemeUserState + + Task1 (Playground).xcscheme + + isShown + + orderHint + 0 + + + + diff --git a/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift b/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..523a635 --- /dev/null +++ b/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/Contents.swift @@ -0,0 +1,22 @@ +import Foundation + +func varProcessor(_ n: Any, intProcess: (Int) -> Void, strProcess: (String) -> Void) { + let nInt = n as? Int ?? 0 // 如果n是整形数,nInt将会被赋予n的值 + let nString = n as? String ?? "" // 如果n是字符串,nString将会被赋予n的值 + switch n{ + case is Int: + // 如果n是整型,这里的代码将会被执行 + intProcess(nInt) + case is String: + // 如果n是字符串,这里的代码将会被执行 + strProcess(nString) + default: + print("An error occurred.") + } +} + +let test: [Any] = [0, 2, 0.2, "Hello"] + +for item in test { + varProcessor(item, intProcess: {print("The value of n is \(String($0))")}, strProcess: {print("The length of n is \($0.count)")}) +} diff --git a/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline b/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline new file mode 100644 index 0000000..b04035f --- /dev/null +++ b/answers/Task2.playground/Pages/Untitled Page.xcplaygroundpage/timeline.xctimeline @@ -0,0 +1,10 @@ + + + + + + + diff --git a/answers/Task2.playground/contents.xcplayground b/answers/Task2.playground/contents.xcplayground new file mode 100644 index 0000000..1c968e7 --- /dev/null +++ b/answers/Task2.playground/contents.xcplayground @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/answers/Task2.playground/playground.xcworkspace/contents.xcworkspacedata b/answers/Task2.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/answers/Task2.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/answers/Task2.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate b/answers/Task2.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..a4d311424be0523a6a8a6641fce6444227276e08 GIT binary patch literal 15764 zcmeHOd3;k<_P`};T>Zkd7d@ZH1Mz5pcXhdUu#2fK3yekz?KoTTHBhe@{8s#7>vLQRlMR~}9 z@{to&qAD~6O-0q{EHn*GM>EiDGzZN^^H3{lL+!|q7NY=)pl-AhtwIb%(M9M|bQ!uD zU4yPg8_-SYX0#dgqCWH}dJH{|o`dK-O&K1QFQ zPto7eXXsn>9r_*}MaR%j=r{B`CRm2$SdGWvu{Z-8a3;>eCTzoYoR14|AwC07#^tyI zPsMZaTs#lY#|!X6ya;=+A1}sBa0l+fA>567@M?S^z7$`HufiMgCVVr#1>cJA#@q0A zyaVsVyYc<_0sIJl4nL1yzz6Xg=tuk}eiy%oKg6HnpYbvL3;q=!$G_p<@d<*6m<%H- zGMbDbX=FSxk}P5&Ii!+Qktt*a+rKcj*x$lugKTrdvc7Npok8qBWN;JQWdpPJI$qe)Isy9le(yz7SKXk zL?_a6T0tx6G&-F&&_=qDE~4$!PZ!fAG)yD3oA%IE^n7|Ty@Xy$ucX(|>*z+hiQY=@ zrrYRtx`XbdyXZZ1H@%-eL7${g(WmJ%^jZ2EeVrblZ_>Zh&*le z^f)~s5{r@>GXvcn9S2bgk|8-#AQjTiuBo>#@%4n~!QU8yXJs~bc*Eg7l!}y$FxrRI zNW(hn{K|?Vx6M)PDzmxDiz{qJ6^>$CVR3o6(^*(mv6zb}V%Gtrt zl5m%|*;f&4?(XyjB5}oIkRDmKqOoWkN<--=1L@Fsmc+zt7#q$;uw*9LiVP?d8KHp* znURS}Sqi%r8aS8+{+kwY(*1#!;PR@Fx6|iQOd71N!P`_G3`9b~jt*bQQ{XBtc2raq z*(%HPDr~N@Vz;fRveIEIEOX}-7L*ngf=q&Re}YzQ8Utky~IlDnNy(2o<9V z=nN)fa;9LZOvzMCy%m;q5}J%kP$?{NIV`J|g(Hs%WJ&L{B2%X z1>sWSYiY;_Ymo}A8YBJ=f5h(#&-S-O+J$D-fp8ZX!(eEjS)%8lW}JdV_k|#eXfKhm~mz*xvweiNim_KB&Tb_Tz|yZ$V45a~^BZ19Gcdy@NM{c0xh8-+7uzg@*ybv93%UbsLp#xZ=mGQydJTPm zzCd50Zy_=n22n{i#36-v0xrRo5P`How9$>1<5hSaL>F5jwzvmB2{FZA@nQTu#1Fp{ zOp-|o(UJ^d6a>eHc1G-P><@`;wKeDhk0PsbMOTO51!i_fI{X3OEWdBL5Z7_ok8Rt2 zv=&{6!l&KdqiFIpM5dI_auig|Y8cP~CM>^T;Oiij4Lx1HaA8cHXI8z(=@@9o!?_-e zb)c=f1@@r7)ep{3uoxGkOFRlyP5q4S2shvXGtrMO<_yJYSkSngxEx)HEWPLo2EQ7> z{(=oOp4$5I#?@XQ33WF|xzJ(<-N5Xer19NhU#K?ZYxRXf zzLs(@2W`PnPvwe;kKeJ?72yMX;Ia{I+RSo=x!r=UChZ`%*_f|AuD3VYyvxjO=M@XN!!tG zvYhJ7q?>2OC$2H&@`G(b;&8r3L=TTV7 ze67KduRPe<s2S}rFF!*lwB69_Mw;a%bH^q=c%iCKJ2T%ga(&x5}V2vmW$ zi3uAt3T14Sru$kW4Z%8pTYDmid>OsU;pY`r+Kc|e%DB}|g^iS0Mc!iwcsYnR^`SS= zo2;Bwv)nig4x#suwjaHN{)*mZ6|9m~^`rM8Ec$>=fpBOl(=7yX1AA!!_iZ3NQ@~g5 zVa@Qi1^kij7T?@N_+luz;Ls4Le~ylvr0E}^>1%ctXqv`3TRA^{0SMd!FqABKoR^_M z2hl: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

_jqRCy52 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 literal 0 HcmV?d00001 diff --git a/answers/Task2.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist b/answers/Task2.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..87e2dec --- /dev/null +++ b/answers/Task2.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,16 @@ + + + + + SchemeUserState + + Task2 (Playground).xcscheme + + isShown + + orderHint + 0 + + + + diff --git a/answers/Task3.playground/Contents.swift b/answers/Task3.playground/Contents.swift new file mode 100644 index 0000000..ccb973f --- /dev/null +++ b/answers/Task3.playground/Contents.swift @@ -0,0 +1,21 @@ +import Foundation + +struct Entity { + let ID, name: String + func verify() -> Bool { + // 以下的内容将能够判断名为 ID 的字符串是否满足13位数字的情况,可以直接照搬 + let reFormula = try! NSRegularExpression(pattern: "^\\d{13}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. + + + \ No newline at end of file diff --git a/answers/Task3.playground/playground.xcworkspace/contents.xcworkspacedata b/answers/Task3.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/answers/Task3.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/answers/Task3.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate b/answers/Task3.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..4d3b05ae5c1b2f938292d07781206202b3b019d2 GIT binary patch literal 13013 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 tbl&9L;@sxk<=o@E&AHEc$a$~xKIbv# + + + + + + + + + + + + + + diff --git a/answers/Task4.playground/Contents.swift b/answers/Task4.playground/Contents.swift new file mode 100644 index 0000000..c526e75 --- /dev/null +++ b/answers/Task4.playground/Contents.swift @@ -0,0 +1,91 @@ +import Foundation + +class Entity { + var ID: String = "" + var name: String = "" + func verify() -> Bool { + // 以下的内容将能够判断名为 ID 的字符串是否满足13位数字的情况,可以直接照搬 + let reFormula = try! NSRegularExpression(pattern: "^\\d{13}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. Bool { + // 以下的内容将能够判断名为 ID 的字符串是否满足13位数字,以20xx开头,第5位为1-3的情况,可以直接照搬 + let reFormula = try! NSRegularExpression(pattern: "^20\\d{2}[1-3]\\d{8}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. Bool { + // 以下的内容将能够判断名为 ID 的字符串是否满足13位数字,开头为0000的情况,可以直接照搬 + let reFormula = try! NSRegularExpression(pattern: "^0000\\d{9}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. + + + \ No newline at end of file diff --git a/answers/Task4.playground/playground.xcworkspace/contents.xcworkspacedata b/answers/Task4.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/answers/Task4.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/answers/Task4.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate b/answers/Task4.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..8151fceed31b71d6695e38bd68d18ab2bd12402b GIT binary patch literal 15361 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 XrK8$W>zEw07>W2-V(o1)I_~%{+3s+* literal 0 HcmV?d00001 diff --git a/answers/Task4.playground/timeline.xctimeline b/answers/Task4.playground/timeline.xctimeline new file mode 100644 index 0000000..d5b53c8 --- /dev/null +++ b/answers/Task4.playground/timeline.xctimeline @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + diff --git a/answers/Task4.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist b/answers/Task4.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..4098089 --- /dev/null +++ b/answers/Task4.playground/xcuserdata/ostrichb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,16 @@ + + + + + SchemeUserState + + Task4 (Playground).xcscheme + + isShown + + orderHint + 0 + + + + diff --git a/answers/Task5.playground/Contents.swift b/answers/Task5.playground/Contents.swift new file mode 100644 index 0000000..3b94478 --- /dev/null +++ b/answers/Task5.playground/Contents.swift @@ -0,0 +1,105 @@ +import Foundation + +enum InsufficientEnergy:Error { + case crazyThursdayVMe50 +} + +class Entity { + let ID, name: String + init?(id ID: String, name: String) { + self.ID = ID + self.name = name + let reFormula = try! NSRegularExpression(pattern: "^\\d{13}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. Void { + if Int.random(in: 1...7) == 7 { + throw InsufficientEnergy.crazyThursdayVMe50 + } + } + +} + +class Student: People { + override init?(id ID: String, name: String){ + super.init(id: ID, name: name) + let reFormula = try! NSRegularExpression(pattern: "^20\\d{2}[1-3]\\d{8}$", options: [NSRegularExpression.Options.anchorsMatchLines]) + let matchRange = NSRange(ID.startIndex.. + + + \ No newline at end of file diff --git a/answers/Task5.playground/playground.xcworkspace/contents.xcworkspacedata b/answers/Task5.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca3329e --- /dev/null +++ b/answers/Task5.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/answers/Task5.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate b/answers/Task5.playground/playground.xcworkspace/xcuserdata/ostrichb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..056e368043072b894bd5c1399ea1111fc1ac8027 GIT binary patch literal 16683 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 F{vWrHBV7Oh literal 0 HcmV?d00001 diff --git a/answers/Task5.playground/timeline.xctimeline b/answers/Task5.playground/timeline.xctimeline new file mode 100644 index 0000000..fb5479b --- /dev/null +++ b/answers/Task5.playground/timeline.xctimeline @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + +