From a0fbb4132b47d62ab3732edd5c9bc9e0bfc56935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Thu, 15 Jun 2023 19:30:18 +0300 Subject: [PATCH] d --- iOS/app/MMMemory.xcodeproj/project.pbxproj | 16 --------- .../UserInterfaceState.xcuserstate | Bin 35789 -> 34930 bytes iOS/src/AppDelegate.swift | 4 +++ iOS/src/Main.Platform.swift | 33 ++++++++++++++++-- iOS/src/Main.Section16Buttons.swift | 21 ----------- iOS/src/Main.SectionGrid.swift | 26 -------------- iOS/src/Main.SectionSelection.swift | 23 ------------ iOS/src/Model.swift | 16 --------- shared/javaScript.js | 4 +-- shared/swift.swift | 9 +++-- shared/typeScript.ts | 4 +-- toSwift | 2 ++ будущее | 11 ++++-- 13 files changed, 53 insertions(+), 116 deletions(-) delete mode 100644 iOS/src/Main.Section16Buttons.swift delete mode 100644 iOS/src/Main.SectionGrid.swift delete mode 100644 iOS/src/Main.SectionSelection.swift delete mode 100644 iOS/src/Model.swift diff --git a/iOS/app/MMMemory.xcodeproj/project.pbxproj b/iOS/app/MMMemory.xcodeproj/project.pbxproj index 46df160..722da7d 100644 --- a/iOS/app/MMMemory.xcodeproj/project.pbxproj +++ b/iOS/app/MMMemory.xcodeproj/project.pbxproj @@ -8,13 +8,9 @@ /* Begin PBXBuildFile section */ 1F083A14C69F20A6BA92A63E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F16A7DD61EF6CD4FB4E3DE25 /* AppDelegate.swift */; }; - 3D03666F3BC2B1F2CBB49530 /* Main.SectionSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5F2B2E3A26F03F6825608E /* Main.SectionSelection.swift */; }; - 79FB208C9DADDA6179E588C3 /* Main.SectionGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AC22F19366076CF4168BFBD /* Main.SectionGrid.swift */; }; - 89086E3972F560A9A1A76CE4 /* Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C71EDBDFFDBC96F6E8E7762 /* Model.swift */; }; B19B3998FA2BA651ACB1E53C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C1742EFC5A1E818780679340 /* Assets.xcassets */; }; BE2994BF2FFF272E62883953 /* swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = D414A6174931F533B0B286E8 /* swift.swift */; }; CAFD870CA84084E45011CC23 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4E32B0495E4BCEA4EE0508D4 /* LaunchScreen.storyboard */; }; - D505E64F4CD6EAEB530BF851 /* Main.Section16Buttons.swift in Sources */ = {isa = PBXBuildFile; fileRef = A38A1AA6B57483F6B44CDF78 /* Main.Section16Buttons.swift */; }; DB1010B8A246D47BEC6B3FA6 /* Main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DF762100A8EDF105B6E136D /* Main.swift */; }; EB8CC50236A211D932BA0DB0 /* Main.Platform.swift in Sources */ = {isa = PBXBuildFile; fileRef = A355A898E25602F45B88CCBA /* Main.Platform.swift */; }; F368609CC7635D385838A386 /* platfrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3E3A0EC0B9264E001C3DBC /* platfrom.swift */; }; @@ -24,12 +20,8 @@ 0DF762100A8EDF105B6E136D /* Main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.swift; sourceTree = ""; }; 0F3E3A0EC0B9264E001C3DBC /* platfrom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = platfrom.swift; sourceTree = ""; }; 4E32B0495E4BCEA4EE0508D4 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; - 6D5F2B2E3A26F03F6825608E /* Main.SectionSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.SectionSelection.swift; sourceTree = ""; }; - 9AC22F19366076CF4168BFBD /* Main.SectionGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.SectionGrid.swift; sourceTree = ""; }; - 9C71EDBDFFDBC96F6E8E7762 /* Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Model.swift; sourceTree = ""; }; 9D774FEE86833E8A0A74387C /* App.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; A355A898E25602F45B88CCBA /* Main.Platform.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.Platform.swift; sourceTree = ""; }; - A38A1AA6B57483F6B44CDF78 /* Main.Section16Buttons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Main.Section16Buttons.swift; sourceTree = ""; }; C1742EFC5A1E818780679340 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; D414A6174931F533B0B286E8 /* swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swift.swift; sourceTree = ""; }; F16A7DD61EF6CD4FB4E3DE25 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -52,11 +44,7 @@ C1742EFC5A1E818780679340 /* Assets.xcassets */, 4E32B0495E4BCEA4EE0508D4 /* LaunchScreen.storyboard */, A355A898E25602F45B88CCBA /* Main.Platform.swift */, - A38A1AA6B57483F6B44CDF78 /* Main.Section16Buttons.swift */, - 9AC22F19366076CF4168BFBD /* Main.SectionGrid.swift */, - 6D5F2B2E3A26F03F6825608E /* Main.SectionSelection.swift */, 0DF762100A8EDF105B6E136D /* Main.swift */, - 9C71EDBDFFDBC96F6E8E7762 /* Model.swift */, 0F3E3A0EC0B9264E001C3DBC /* platfrom.swift */, ); name = src; @@ -144,11 +132,7 @@ files = ( 1F083A14C69F20A6BA92A63E /* AppDelegate.swift in Sources */, EB8CC50236A211D932BA0DB0 /* Main.Platform.swift in Sources */, - D505E64F4CD6EAEB530BF851 /* Main.Section16Buttons.swift in Sources */, - 79FB208C9DADDA6179E588C3 /* Main.SectionGrid.swift in Sources */, - 3D03666F3BC2B1F2CBB49530 /* Main.SectionSelection.swift in Sources */, DB1010B8A246D47BEC6B3FA6 /* Main.swift in Sources */, - 89086E3972F560A9A1A76CE4 /* Model.swift in Sources */, F368609CC7635D385838A386 /* platfrom.swift in Sources */, BE2994BF2FFF272E62883953 /* swift.swift in Sources */, ); diff --git a/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate b/iOS/app/MMMemory.xcodeproj/project.xcworkspace/xcuserdata/mk.xcuserdatad/UserInterfaceState.xcuserstate index d56bf83be8d84cc0a178a3a6e75c043060655f1f..ee60fab509eec63838e2be300e96a9d2c4e6d742 100644 GIT binary patch delta 16047 zcmaib2Ut|c`}NM;zNjo9y)P`yM(?l!OId*h1XhZ4mabI0$=>Z67ja_5!C3e5LEEw}op5Ny__bxl_&N=6u_nnzL9-j@LPlZzpfWf*#3TPLBrC;e5@01SlTP!3~Z98|(yFcGR?66^yrU?$9hxv&scYGEB5 z42MG=j)J4%IM@iA;3Bvf{sfo6rEnQs4x8Z$xCU;9JK#>ZA0B`w;7ND}o`sj-EqE6` zgpc4e_#D25@8Bo+ndn5A5SD}$VNbXd9z++SE76VUP6QG`L@*If^djPk1R{}85m`hw z(U-^}w7Envp&=@XDx#JcMhqvuA;u76iE+euVlpwESV^oRRugN8wZuANJ+XnMPvRc&jCfAGAl?!miBDu_(v&nK%}EQ=lC&bN zNgL9Zl#;Hb8`*{IPWB)@Nnb7LM+T9>WC$5b_9P?7QnHe)B5TN6asWAy97+x&wIolD zB1eK@pe!jX%9^sF94J?+8`Yii zrvj)zswWjeWl~vGHr1EPp>nA_DxWH#3aKKhl_idsi)rFK!fse{xZ>M(VhYN75^52%OKBkHl1dO|&=o>9-K z7t~AY4fUC(XqxUs8`8$K6>UxX(7v=E?N0~LfpicZOoz~+bQm2$$I&V}iS9#Z(3x}r zT}Th5htb37Z|HAnEzQ%29zl-p9(|vFPQPFbm<~)wrW0exNEjo=m@#2GGp39s z5Q7`!(=d-Ocs;P^kwpyQl^aQ&r~ymn8C~tW+*d) z8Oh9L<}ve`1FrS#uEW@%a#~QK5tOwhL?aFpzyR$u5Pu7d|W_?&+HjtIG zJ=qvGmQ7-l*%UUD&0_1=dbWWbzz$>wv4dId5Oyd#j2+JM>=|S;sdyqZBo@9Sx&#_n7tL!!QE_;sy9OMX&?yQ zPRto_hMXB^&e?KyoD1j5xpAJH7pLTUaq(ONm&mEOBrcgt(Q>`HRIU$~%jIzzu7vB) zRdY4mU~UMf<#-Np-*Z23bGdokd~N~vBe#%iEA|ry>6XxPV5s|(Mxf({GG;s}Hn+Bu%G|s3@bc4r zFz91ryY|p+s3#_Y^$y>E2z^H zx7a&43b~ze?z-riIM>M;SC+sQ7gskS!??9tIL`3Ets1m+?bf|Ld0nm-PWHsD8MJu& z_zKA#TT6Gt$^OQTV%>y}9x|cfD8?sZzwI`o!TTOGg~^-3!<|HJ|C)M6IQ1NMN_Vki zn*4z1km$JRn&^q>jp!o~0S0sc_Mkfm0HHt*B0vnt1ZAKW3GR>Tr4e@ZUL1-t7jTmZl4NjhV(ql?QMs_Wv)>+yYvP`C+P)bS1; zTJQ%z;0m}3MuF?#1{lNtz)$C!_}N&!oqQv&I|s&r@n8b((L^u_+y;Mwsn|lNiyHYK z`8k55{5QP3MbrrwcnAh90*}CB@Pz-KpU2PtTjW2$3#`r${9JwnW-_s$ynpv(LF?+e z_;#_0b|t?OxIO7ZtGEmPA#R(T5D0Se3;7AWNY{UWy#E*OAizdAjbC_1)KTai6hl*y zM>8~l9biY;2^vBPG=j#^1a{^Z@r(JN_$B;Oei^@r=csYf!k#cnWYz>DU?jhh-_!&ZFq+@YZ{cOR?dF=G>0jDV zmR(ieU!&|_tQoASH=;V}pBWDZE#${K^_1uxki@qAQOPh>Xf*})=6~jQG{I=7z-?~k zW$7i=RmJsR+U}-rJZE6JW{{%1IH9_r*bSSJz+JZJP$TTi@8-i>U>^RR4-0hV&NkX# z_)8bC&l(Dbf#KKyzQNwB)u5mTmi)t@4)J^b)1Y7#?Dxf>4)S~dVNkFh8x(AS1K>b@ zAO9=A|Nk14w$-BAt>oW^15vBt9QgkkPCHZM;Y`6qCcues5}XXDz^QN=oDOwx27j18 z!XM?2@yGcS{7L>4f0}P;hO$|0Hu6K8jV!=6a;D8jervOl-&<`Y9Ig~>WEFq5-A2~_ zr;W6CWeeOU*vD4>TqE4hpBL=I0`7u)1SNN4`?&CxedwkrEfV2DctkJrVJ!2-uVnrr zuwLI*#{f^k(|Hop|LYjA<1eagf-So1u0dM(8$74i2E5?!@>kllnX5O6Kfs_R@G`st zufl8aI=sPO<*)HK_*?vK{?EU4y52hQcM1c)O(uA+Rg>$2CTUUCb(;3{$D+m9N8IEi zaJt|jwC%cnK zFd#Z&ABh7%T?6*tQPoug`t?^0=%>5pHav8p#8_g_-;)^dB9qT;|5^zo3<(K#zSy&; zX$Cj^-@velFd~d~v)qFXI}>Iik4D0jf6z#n^AC0IU2OcUMTeRQ8^V@<#J}Lf+Y~1p z2xpPmBEpf75>EVM{t5qd5g`+~5w83*-hzLwLtQ+znO_8R>N)CA>p*X>-h=S@S9M=p z-JgGntH0uL&^K%i`Z(H`YU+f5@6>bXwSTk`LWGJu7B1wwwl^v#6e5qsL{B1uh$NzT zt2g{x{vH2*F%eC~h!zuZ{09U8AAta&`{dr!C5cEAiYF5(L~kOM|HyyhKO-Poj7Lc$ zjK*W5BbH~2uGC|sK^{>c@RE-J)V=a>GAbd;gx{qIkc~t+0+hg1NI!w8{zNqbcy`GB z%~c&S@LymDiJXZc2rzs{1Xy0CTi3M&D%v&H}pnKBA)ErMO2^`>v ziNvHns?_eq1q}sBM%48Uox1%7putex?d~$?82^|kAMZ#-x0oQm$Zo!Y{?Xk6qZD4< zyu5rPgM6aAgQ8<1b=`ZodfAB*TR$36KT)-)PBcX1;Lus*fYS;@<)Z$g?xJK-75=+H zRMMK?Z^OVI7oc_&{2u-Q*TZda4?Kof-sj*2coC1Ut9WePg!i%GT49s1!&VYYq!F2T zIo%I0qqTSuJ%yM?=!lub4&pG;LcGL_VK34LuXh9Rinljj=hoo0?Fe!LISH?7r;*L% zKJpOx8+oBsco78pZ{2ZkBkdgoa4f-7F5KqS993%KfQEv?Dvbj3u}FA~h*zspgpB;4!Qbyn^5x1mE&<1m7e0VZ#U?S0LL; z>=1*Dw{(H{ zow%5Z+p2G!0V3d>CkcrT^z&8tDRdY7g5<;>#AQ7EzA&nvDK5gvS44borh=VUPCE|lHQ$nCyo+MniC&X1ZDZnm|_)Kyl zkL9F@1SBL0k|ZgTCK-}Npa%k;2zVjjjerjVz6kgs;EzDSa#BnhkR8a5WGB*)l#oUu zX9NNf2uDDUKu-j)r-(v8fk3oQ9C$j&4h(7{?MVj&f)EJBQG;|68IsPVjC297voN7` znxck*1y#bI^);HJ@`5S^f)NPOnFUFm+({2Cpt_)HfToFb$0D`W?kdzqAWSHi9n_8R zBE5AJf?N#zaR4R*5QxN!lpR4X+A!fa?ph2#Hp|niSGTH~Zq@35+gE- zRFKhR47fqYkxH@`8BZpViKGgAM<$agc!Z@Q5Qji71QHNX@r?*1BhVXxGz8QLWFU}* zKwo|;0=WoaZ&!#wvCwKdS*9lYkQrnqnMG!keaRd$m&_yc$pW&FEFz0Z4FV+y3`1ZF z0!t9sj=%{7u;{N5?1-Qvf&mD|BUpgoKm^Al_#=WF|Dh^bp;uL@dln|u$wN$ZpMpD@ zei5Cl)@R3KTg9T=;}Ukpf9E#na}#ydAz@!7578$l>8@H!b=N{Vf0gyEJ}X66>nJ>q z(ea^1Up;Q5K07r};@N6r$3qRi${nlEP0y1kaBdf!MVR$hxs&v{eexusZCy3d4Grt? z)x(7aC$`{B-R=RgUnS4hCud^{BEL$Wr%%q&O>PMID!EagoTr-{p72%j5`A(3Zrfj{ z8u&G+75c2AJc*CcZ5wrze(Czv;3C)R%V;oVzLo9PwSnA)XPV?jaud0k+(K?8w~^b) zpUEBMP6TiaEJFatzzPH^5x^$j4}ty&;3!zrOzzfCIk6l6Rn#bQCJ&0-5UAD9IT5Hw zU@(rcI0O!9opwf$zX?{39a~-7yp#ML&pUC=)(T2HlYGfzcRUnNKFJ6C7F zn%a@?DOy1Lf&55*B0p0i3Q&+DD3YQO7_OTyx9-wRF?w8-fgTrSDB$|89oN_|xF+dw zQMMQtWry&BRlnw<9RC+C%8l~CxG3x$$2C&eF^+G=MfIS(g^ov3Ui>BmCg6@!zCy<* z>XZs=%OEPW6&4jDz?%G3E{0W1MN)|v78OM)sAwvNilyQxCDn_Hr?4l$10LJsbOdw= z%s^l!0<#d9jldiPzHg>fZD4!1fmI7&e`p8$;}@`tTfxRt#R6FD5$3joEyG}`a;gGf z*gobVFu(P_fFCRAC~=W^w8=@;Q4IoYY!(X}sR0Ny>R}I|hU;Mu6JR$9z`hk=FVYog zOr-1EYmcP9)8ij4;Q#5XVy*ZmQnLm8lc>qm6ly9pjhasBs2S8u3PW9rz%m4uBY@-i z3ItXnunK|I2&_S1Z8J5e4gb70{0jyA>)P>e_=10Ho7k%b{J84+cKqxAr`X%5p9R#| zXKrkyb|A1xkNOvCpC0vI0rh49&VB*)7G1W|%8EKd9oM5hCZOH+RkmQn)EVlEfc7l) z8+DF4PhFsXr!G>Ls6VL72>h%Ii?zm?SKDyi)UOArI|8o#?YIu=SA+;0YlHPlfb|-I z1MRThVp#v)H)xZC7SRyHq5%Sj8fgOIEh9WOGiZhux5A=10oIWw+5qARdsJBA|7+=o z7xT2Fb)%rYQ4`v%6*X-tpg#V0Z9H@>i)?6D44Ss3?Pz=2fp(;&v=i-2%V-w_P9ks$ zfzt@IAaDkOvk3f#0QNNJ5xCGyyXmQ*yXqyTJq0R$Z>QqY7m2T7F495Ia7+b_CkYqZ zsGuYNm%_A?ju)uFQTLBV8V|S20u?GcnQqW2SN}zYMA1$_7M-If zpszr{^}p-15>Q0<7YHb(HFODGN|({)bOl{WSJBufWA}Iqf!hfDi2$BE-$mda0{0Pk zfWX6My1I>k`ZfXv2?RW9C*a8!0$%C~7%dR+9RiQr2^c33uozSe7hV*PZoS(5G(DA` zE)aly%+p31`gL`T_k|kNFYC3_A#zZ(&9t z*DCKz`m=!f75$q2i+)4DrQgx-=@0Zr`V)ek5Hv(kf}jzC#t51q*cm}n1kDgMZ)QY# z%nYfQmth6W7VVg=+U14z`mxTKVbF{@f|hNd8LR(g;EW^VguyaW1g#qxX9R6p4V-af zx?nVny8zY}gJrr3VD0{6k5JORjW@=d@oQy(@f8?wzzi^51qSSd;9SgvFfo_{CX@+d z!WlW!lZjv=nJ7lV;D+(zoe;#2mm%napeuqHq&tEh2zF^^V%sQ)XA;1VB4;K^prC6z z1w9b-7t9Q|UFS;uS;u&qZhx{=w4V2obktqcxcP0Thy;#fiA z9fHJh|0VJE_NMkS`}K%_6%h9l5bqH9h|^1alsP9LKE@npPB15#Q_N|mg*n5VWqw02 z0l`EBRR|^_n2cZwg1r$;MKBG)^k(LK8wr=%to*7#g1ViAtS?rc*Cz2JfrQ5h_Gu^K z872X|U|!(s6+aij4B?iECGODP_qWV@frfVoW;Ze)5bWDZ11n+)42cB-4LO(wmK12n z{Vy6~+L~g;Y{ym_*bV{>`IrWl6lln8rGYhJ?Jx~&XV#Q8W6fC$){?bityvq^7QsRU zix4bEP=jCzf~5$SAy|$ew!F$_)?QBo>!hcFbroo+YNw(43k?meG{mxgmp$^+R+e@(ZIvk+c zL>%4`tQRJ0PJP;|_h!@e;L`-~1HLXNjB_@dEfLW7WpmhEHjm9`3)n)oh%II@;z0-w zMsNs%LlGQ?;BW-LLGW7ywFvUfY-t<%$~N@X0(v~Mg%5%wzn~whHv;w>0X?ogq8&Y6 z2;gx}?H4XQ#PK-L-@l9nb}Tzyz&;MaQH|^b1V;KkKVVAPY*yU_9yMkSbAb#>h1ScVg zUBMItry@8F!RZL<5S-D>u5RODz1}0Rn*|W(B_rJYc~1t!V3>IeVzp zBd|xP{p^ue5@ze~*a}SAdw+^;5tulQ;P;K}83cb2n6P5cvllTa_JS}R<_g2%k}w=_ zY{y1mZN*+^Z|O1L6fiFkFkcdgny1HnpM51@e!xCtAF+?wC+t)98T*`l!M;RrA%cwv zHX*nO!Nmyvgy0ecu^(H8;PPhnbsOe)ZQ6elFgLej#&df8aucrCYtMDSm^o|}E7~w~ zc(%EiGZHll7lJE=Z9II#h`BbzoCRlv5p$LZu5RS45nO{2yC&LmQjCam5CE^mfH@}t z@VfsR|CicZa_73XvcPo_SlEDB;G6^&*0r+0d2?Zy1;4keg zWC$!|f)~Pt;2yyV;u~h6eGiYz=L!WD@P5v|Mh?58Uj-JDOSuXGQ6yI`41oQ3P;+>_ zhX?#jvLQS;3n!)%B+15Jl8C89`r(Ol}r8TiCiikKa6CTeyJW?+D^~+a(15K=AU0_{uWSV+FSszbxQZa;v!2+!_S0 zB6tnK>j>Uh%&p_ra~n7u6K^7T3&Gn6{;9iB^+V(?(V<1$ZtfRu4}y0Pe1zcBFE0hS zU%5jfk44;m?f`cX!Mh0FL-770?l516 zpy;sZD1NncR&-r-SM*Hu32;CHEP)NM!v{VbffEP?Q6LAuFddFpaU=1I^~v}R+jKAk z%mF{(0}%`G(T~mGckmLt#fSes;^TibKKf^XUsy}KRL`KX6qS(&oN;LVgr4-gu4f-xd+@seA=QK!B_lf1YaZg7hZ;p=DX?)>K%1V z{TQvVDb2msZ%S{cOZjNLDV>{EU0g84p`gLRD=65{Rytmtib?#cxwT}t{x>T+v=F~`Zp||QgPQRfh408zv7uNZHVPISi%rCx z#isb60^V@J(fcEUpAi8NK_G%c1cL|;Kl1ObZn0JCZXEpd&mBRreQPoy5_Sat-gp!{ z>yzPEo0flX42s?Lx#Yh$L&e?oS@b`*PsKj^WcHuil;S{rvbb%B(NMQ;pt*K1K4mw7 z*5OliKhe#2O|}}Z#5U1e>FxA&`VB+jBXVYp1!Kk7Fn0K$oD?6C^I`m$0DMd?6i?)P z;z@i8J_`3U^Cv#N=8R9MW#DsZCF~G<4DB0M%OZ9pI~pHG8^=yy7vO_vO*kAb!J)93 zUCFLy*Rt!i?0)tFju)Rf6V3s9OC>%&mVpnC)o^uO12+&K9vh1N!5HidCUBFuDcm$} zBOX?FxVK_^aaVk597mfZfx?*(O=#J4nqX$Nhj7^P$jdP8W@nqxK#@`#y zHJ)$$qwzB1X5*E{tBuzhuQxtyeA)Q5iIIt&iM@$~iPR*_q?bveNs>u#lQa{xNv+9H zli4QUo6I!@reafbQ!7&&Q+rcKQzz3{Q*E+oifO88U(<5aD%1X^wWjr^159h&dk9~YUXU_V&-NhH;XWfGK)5g zHB*|!n*uvhTt3`JUPYZ7gUkiVWK#ORLSPP{^yhWl#l0}L| zszt6voyAy-Sr$zedo6yoIBjvx;)2CRi>nsbEpA%ews>dR(bCM)+S1n2-qO)B(lXa_ zgyjs&^_B-LTP&YiKDT^n`P%Z0{^}*V}x}&w3wV!pcb*6QRb(wXAb(M9E z^*7d9Yh*prdZP7A>mRI_T5qu4X}#NekM%z5_co-Bm5sfPpG~-p(k9*}(Po6r1e@75 z^K6!BZPwZRVRPNKgRP~lqir|a9=2Y#KDME@k+!k6IkuB*m)fqiJ!pH(_NE zV!IA@o$Mrb#&(_Uy4m%x^Rn}?^Ro-E3$lx}Q`*JbCE6v~rP$@#<=Yk7726H98*Vqw zZi3w;yD4__>=xK9v}>|kVYk(8yWI}EU3Ty7S$nP6zJq-yduw}7dvAMRdw=^t`(XP} z`*8c7_L24q`%L?6`yBf``vUtSdyRdmeYt(5eLwqZ`-%1|>`&T1b1-!XamaJ{)?vQG zc87fq2OJJL9C0|~@Q1?{hieWu9Bw)M>2TNKzQbP*?;Jije0BtmgrkFFH%D(rUq^q( z5XUe_xz;hlG1;-NW1eG~W4U9cV}s*B$B~X>9mhLPbe!g>bDZfo+i||*O2_Sv`y3BA z9&$Y5c*gOu<5S1yQWL4E)Ld#QwU*jS?WK-VCuyiOT-s9_DOE^gq;b*|X@)dQ+EjZjf%0?vFy)3;dy)L~e zy)C^Xy(fL(ByxgIq!aDLI*FY+ICXN8I2k*2b~1DFaq8_f&}oj-4yPN=w6n}v;auQc z;oQ%;+PT(wsPjnY(avL>$2m`Mp5*+4^L*zYotvB&J1=qG=X}cfH|O)tzdK)XzUF+x z`IgrCg-j%)WQ>fHb&^SB#bCs|jSLZ*}z$m(SiWs_x7Wz%IdWV2**WR0@bvbD1H zvW>FMvaPc1vK_L+vZJ!&vXinuWLIR@WH)4YWG`i}Wp8BfWS?C+xO8%nxEQ@PqTq<0U%Pf~>mz^%!Q!ck%-nzVZ`RMZ56}S?vlxrtfb5}3dK-b=` zWv&BU2fGe+{l-=6id<*9E^uAs`jhKY*X6F8U3a?fcHQH;&-IAwG1n8Wr(9cHuem;Q z6S;}qOxzsYT;1H=y0~?7^L6ug3v>&13w2Yu^>Hh9)3}wmmAMUY`__$j8{sy}?K`d8 z6t`(^Gu&pmeeX8cZL!;Gw{32x-LAOZal7aC!0nOSQ@6Kn@7+GSeRc=#guA1AxO;*7 zQ1>zJ-g564Z>4vFcanFCcb#{$ z*87b2HSe3=x4rLrKk$C!{o4DJ591^DG4ZkTvG?if)5FKh$JZyoC&(w#C&4GlXOhn> zpJhI4e75@R_c`Qq)aQiHX`eH`M!r_QPQEU_KE8pzA->_hQNA(0O5b?j(Y~8}_xkSl zJ>+}T_k`~$-^;#NeXsl8@{{>_`$hZ3`NjKbRemXcX?}hDvix%V^8M=l2Ko*08}6s| z8{s$FZ>--0ze#>m{2KjM`knE+<4^e8`n&r_`K$f&{EPid{VV*d{D=6D@}J^A-G8S4 zI{)qdd;JgkpY=cQf6@Q7|L1@X0UZN61xNxs0(=7e1A+oV0%8J^0APl4e*+7H9 zPJu>&odeAStpaTW9Ri&KT>{+$y9V|M^bYh5j0lVhj1G(o92+<@aCYGLf%5_{2Hpw0 z7x*CXagckEe^6jha8OuKZP2$te9(xX(Lphrg>?z*9_AGm z6Q&G{*M=pAC5814OAqT4mKoMJEH^Aa?3=K8VZVgk2&colh9`$thffY)5xy~eOZfKi z9pU@KPlTTeZwWseelGk%`0en!;Sa(ehd&E{A(zN))pDvBBr)flxa>R{B7sN+#5qb@{UkGd6gC+dFGqo^lQ&!S#L zy;490rC=2XicSiNqMIUEAy-5w6bhvxUZGNGlNEW2LPfQrK`~GDnS{_{# zJvw@M^vUQKF~%`oF{+q8FoQt^~b0_9y%-fjvF`r_ISSpr{6~|h}y2OUWhQ~(4Dq>?} zd&MTkCda16s$(-_`^VPC*2fNr9TYn>c6jW!v3%^v*wL|LVi(8mi@g)a#dV8IjT;m< zD{fOW}PFb%Upd6tbqa3H4sGO#pp`4|hqg<-os64DZraY-^QU0d9puD8KqP(uW zrM#p3p#0nm^dfpuz1Us`y*l}A}mb1$=AKD~PP8rW-2uN}Q^#MAMzctw0cd_|}D ze(^Q&b@9XEN5y{^KUUXmq^0&^{N?x?@wejd#NUg56aOxON$8N!DZwbgEWskdI>9!f zYeG>syQ-_I zyDDClp~_L^sR~u4s&ZA8s=w+Rl~y%THBF^c%~H)(%~vf{HL2FAcB#&&&Z&M^{h_+5 zx}mzQx~qDidaQbuL?>}c21y;043mtLOq0x$ER$@K?2;Uk!jk$X@kvcd2a+BpOOkse ztCA~|8Q--7r zPtm4~NEw|nHf4Uw!jz_z#VJctmZz*tS)H;rWkbrQlr1S|Q(p8o?;X@T$D;Sh-b;HQ z=zTjCrW&MnN;OI~NwrCprMl`ajdIt{OhsiB zsc%x>r+!KUX=ECcCQj>^CQXy2xu&_NbxG@<=9T7?=9dWMc zde`*$^osN`=~L5n>9f-3q&KEFr>{z1lfFKEWBTUwt?B#I52YVXKaqYq{Y?7P^p9FK zRFi5(-9g<+ZKO6)OVu)UcXf!mr#ey{t?s2xP$#KV)cNXu>JjSE>apqx>dES9>KW?U z>L1ke)eF^|)LYft)jQO?)O*ywst>3SsgJ6Ut52#Q_A%(wqfbho0e$B7+1=+#pN|<< z8BQ548SWWfGJG?_GJ0l2W<+PiW@wce>Ws{cz8QHLg&D;eC}VPlE@M{4oQ(My3p1KB z7H4e8*p#t1<6y?&jAI$6GtOk3%eatnC*x%%m)RlHFw;2GG}9u}I@2!GG1EEIH8V6* zo*9uDl^LBGml>a#n3J2Nd)omrnbJ#%yBh0G6G(yW*)P1dNa#;oS7RatAbS?jZY z&iXa$K-S@`qgf}iPGz-ZUCp|Ybvx^B)`P4^+2U;TY@2NRY{zVuZ1?Og+1;{3v%|CF zvy-!XXQyXpW%td_%Pz>S$^IsLdiKohIoWfw7i2ePFV0??-JHEDdu{gq>_gc{vX5n- z$UdEYHv3%mh3re&m$R>Cf9Px7SKhavuXc3b6@5?keVo%V$0Nrl$3G`1CnQIalbDm7 zlbWN>$;`>l$;qk6>6cTJQ=c<1XK>EUoTi+mIm>fa=B&%vn6o8kTh5`Jqd6CHF6Ug$ zxsh`x=YGzkoF_S-at(4Fa-DKra@}*g=Jv?-&h^U;%niv6&rQu$=Vs()<@U|Z%Pq_; z*5;PvmgiRH_RAfgyFB-J?vp%|yr8_Cyy1Cs^S0*g$@?|$VBX=pmb^=OSMsjs-O9U@ zcQ5aC-rKwnd7txPKAG>B-#y&il zws1n>%zB%pNd39L=jcgxyZ4| zzbL3ER9hr3iY$sQiYtmQQWd2Xr4^MIRTcFwswt`~8c;O2XlT*!B5e^W8d7X&x7;8*578)x} zfJUKFY7#UmO{zw%$4khj-aV1qHlS|f@TqyZaYF!#! z+NU(Xw5YVCw5+tYbZF@}rP|UFrK3u}D;--pvvf}B+|mW5jirl9eMOp7Mby-o_;Id(5 z-$@`}ic=!&?Cl!~;9J{4INITd*o zgDZ3ut1GTo+^Kj{@vP!qC8#7TnM!eGhf2#zhf1ePmrD0a&q|+4|H`1skjmo9>6N=G z4^|$oJXd+S@>=E1%0DX~RX(kJQTe*^P37k*w#K~1s>Zd(w#zJj{636K delta 16441 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 diff --git a/iOS/src/AppDelegate.swift b/iOS/src/AppDelegate.swift index 09b2826..a3de474 100644 --- a/iOS/src/AppDelegate.swift +++ b/iOS/src/AppDelegate.swift @@ -17,3 +17,7 @@ extension AppDelegate { return true } } + +struct M: Context { + var itemsCount: Float = 16 +} diff --git a/iOS/src/Main.Platform.swift b/iOS/src/Main.Platform.swift index 0067960..9c82050 100644 --- a/iOS/src/Main.Platform.swift +++ b/iOS/src/Main.Platform.swift @@ -14,9 +14,36 @@ extension Main { view.backgroundColor = .white - Main.Section16Buttons.setupCore(self) - Main.SectionGrid.setupCore(self) - Main.SectionSelection.setupCore(self) + // Создаём 16 кнопок. + for i in 0..<16 { + let btn = UIButton() + btn.tag = i + view.addSubview(btn) + buttons.append(btn) + } + + // Расставляем кнопки в сетке 4x4. + for (id, p) in memoryItemPositions(c: M()).enumerated() { + let btn = buttons[id] + btn.frame = + CGRect( + x: CGFloat(p.x), + y: CGFloat(p.y), + width: CGFloat(memorySide()), + height: CGFloat(memorySide()) + ) + btn.backgroundColor = .blue + } + + // Учитываем нажатия кнопок. + for btn in buttons { + btn.addTarget(self, action: #selector(Main.Core.selectButton), for: .touchUpInside) + } + + // Выводим номер нажатой кнопки. + didSelectButton + .sink { i in print("ИГР MainP.viewDL didSB: '\(i)'") } + .store(in: &subscriptions) } @objc func selectButton(_ btn: UIButton) { diff --git a/iOS/src/Main.Section16Buttons.swift b/iOS/src/Main.Section16Buttons.swift deleted file mode 100644 index dd29dd9..0000000 --- a/iOS/src/Main.Section16Buttons.swift +++ /dev/null @@ -1,21 +0,0 @@ -import UIKit - -// MARK: - Протоколы - -protocol MainSection16Buttons { } - -// MARK: - Реализация - -extension Main { - enum Section16Buttons { - static func setupCore(_ core: Main.Core) { - // Создаём 16 кнопок. - for i in 0..<16 { - let btn = UIButton() - btn.tag = i - core.view.addSubview(btn) - core.buttons.append(btn) - } - } - } -} diff --git a/iOS/src/Main.SectionGrid.swift b/iOS/src/Main.SectionGrid.swift deleted file mode 100644 index 4f54493..0000000 --- a/iOS/src/Main.SectionGrid.swift +++ /dev/null @@ -1,26 +0,0 @@ -import UIKit - -// MARK: - Протоколы - -protocol MainSectionGrid { } - -// MARK: - Реализация - -extension Main { - enum SectionGrid { - static func setupCore(_ core: Main.Core) { - // Расставляем кнопки в сетке 4x4. - for (id, p) in memoryItemPositions(M()).enumerated() { - let btn = core.buttons[id] - btn.frame = - CGRect( - x: CGFloat(p.0), - y: CGFloat(p.1), - width: CGFloat(memorySide()), - height: CGFloat(memorySide()) - ) - btn.backgroundColor = .blue - } - } - } -} diff --git a/iOS/src/Main.SectionSelection.swift b/iOS/src/Main.SectionSelection.swift deleted file mode 100644 index fa3936d..0000000 --- a/iOS/src/Main.SectionSelection.swift +++ /dev/null @@ -1,23 +0,0 @@ -import UIKit - -// MARK: - Протоколы - -protocol MainSectionSelection { } - -// MARK: - Реализация - -extension Main { - enum SectionSelection { - static func setupCore(_ core: Main.Core) { - // Учитываем нажатия кнопок. - for btn in core.buttons { - btn.addTarget(core, action: #selector(Main.Core.selectButton), for: .touchUpInside) - } - - // Выводим номер нажатой кнопки. - core.didSelectButton - .sink { i in print("ИГР MainSS.setupC didSB: '\(i)'") } - .store(in: &core.subscriptions) - } - } -} diff --git a/iOS/src/Model.swift b/iOS/src/Model.swift deleted file mode 100644 index 0b64e15..0000000 --- a/iOS/src/Model.swift +++ /dev/null @@ -1,16 +0,0 @@ -import Foundation - -struct M { - var itemsCount: Int = 16 -} - -func memoryItemPositions(_ M: M) -> [(Float, Float)] { - var pos = [(Float, Float)]() - for i in stride(from: 0, to: M.itemsCount, by: 1) { - let row = floor(Float(i) / 4) - let x = memoryGap() + (Float(i) - row * 4) * memoryGap() - let y = memoryGap() + row * memoryGap() - pos.append((x, y)) - } - return pos -} diff --git a/shared/javaScript.js b/shared/javaScript.js index 298fd79..334a6c3 100644 --- a/shared/javaScript.js +++ b/shared/javaScript.js @@ -13,8 +13,8 @@ function memoryItemPositions(c) { var ids = utsIndexArray(c.itemsCount); ids.forEach(function (i) { // @ts-ignore - var row = utsFloor(i / 4); - var x = memoryGap() + (i - row * 4) * memoryGap(); + var row = utsFloor(Number(i) / 4); + var x = memoryGap() + (Number(i) - row * 4) * memoryGap(); var y = memoryGap() + row * memoryGap(); // @ts-ignore pos.push(memoryCreatePosition(x, y)); diff --git a/shared/swift.swift b/shared/swift.swift index a6f8131..58bb724 100644 --- a/shared/swift.swift +++ b/shared/swift.swift @@ -24,14 +24,13 @@ func memoryItemPositions(c: Context) -> [Position] { // @ts-ignore let ids = utsIndexArray(c.itemsCount); - ids.forEach { ii in - let i = Float(ii); + ids.forEach { i in // @ts-ignore - let row = utsFloor(i / 4) - let x = memoryGap() + (i - row * 4) * memoryGap() + let row = utsFloor(Float(i) / 4) + let x = memoryGap() + (Float(i) - row * 4) * memoryGap() let y = memoryGap() + row * memoryGap() // @ts-ignore - pos.push(memoryCreatePosition(x, y)) + pos.append(memoryCreatePosition(x, y)) } return pos } diff --git a/shared/typeScript.ts b/shared/typeScript.ts index f2457b7..04062c2 100644 --- a/shared/typeScript.ts +++ b/shared/typeScript.ts @@ -26,8 +26,8 @@ function memoryItemPositions(c: Context): Position[] { let ids = utsIndexArray(c.itemsCount); ids.forEach(i => { // @ts-ignore - let row = utsFloor(i / 4) - let x = memoryGap() + (i - row * 4) * memoryGap() + let row = utsFloor(Number(i) / 4) + let x = memoryGap() + (Number(i) - row * 4) * memoryGap() let y = memoryGap() + row * memoryGap() // @ts-ignore pos.push(memoryCreatePosition(x, y)) diff --git a/toSwift b/toSwift index 8815e04..4ecf034 100755 --- a/toSwift +++ b/toSwift @@ -13,9 +13,11 @@ let fileDst = process.argv[3]; let globalReplacements = { "function": "func", "number": "Float", + "Number": "Float", "):": ") ->", "interface": "protocol", "})": "}", // forEach + ".push(": ".append(", // array }; console.log(`Converting '${fileSrc}' to '${fileDst}'`); diff --git a/будущее b/будущее index 69d1bcf..f9d9cde 100644 --- a/будущее +++ b/будущее @@ -1,9 +1,16 @@ +15.06: 19:10- -НАДО: * поправить Floor i/4 + * попробовать number(i) +* поправить push + * переводить в append * перейти на один файл swift * генерить memoryItemPositions.swift * ввести общую библиотеку? + * ввёл пока platform с функциями uts +* упростить структуру iOS помещением содержимого секций в платформу + +НАДО: -* в конце: разделить функции на разные файлы +* в конце прототипа: разделить функции на разные файлы * будет ошибка tsc: cannot find name, так что придётся покумекать