From 363ae146fe4f68c4516903626f7572146a712774 Mon Sep 17 00:00:00 2001 From: Hadevs Date: Thu, 11 Jul 2019 15:49:14 +0300 Subject: [PATCH] strart working on protocols --- SwiftInjector.xcodeproj/project.pbxproj | 12 +++++++ .../UserInterfaceState.xcuserstate | Bin 17863 -> 26439 bytes SwiftInjector/Containerable.swift | 33 +++++++++++++++--- SwiftInjector/ProtocolTestClass.swift | 19 ++++++++++ SwiftInjector/ProtocolViewController.swift | 13 +++++++ SwiftInjector/TestClass.swift | 18 ++++++++++ .../ContainerableProtocolTests.swift | 33 ++++++++++++++++++ 7 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 SwiftInjector/ProtocolTestClass.swift create mode 100644 SwiftInjector/ProtocolViewController.swift create mode 100644 SwiftInjectorTests/ContainerableProtocolTests.swift diff --git a/SwiftInjector.xcodeproj/project.pbxproj b/SwiftInjector.xcodeproj/project.pbxproj index 384b5b2..d4e9f3f 100644 --- a/SwiftInjector.xcodeproj/project.pbxproj +++ b/SwiftInjector.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + E6787CB022D6718F006B7C5B /* ContainerableProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6787CAF22D6718F006B7C5B /* ContainerableProtocolTests.swift */; }; + E6787CBC22D75D02006B7C5B /* ProtocolViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6787CBB22D75D02006B7C5B /* ProtocolViewController.swift */; }; + E6787CBE22D75D11006B7C5B /* ProtocolTestClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6787CBD22D75D11006B7C5B /* ProtocolTestClass.swift */; }; E6F3F5AF22D37D28003D86FA /* SwiftInjector.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6F3F5A522D37D28003D86FA /* SwiftInjector.framework */; }; E6F3F5B422D37D28003D86FA /* SwiftInjectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F5B322D37D28003D86FA /* SwiftInjectorTests.swift */; }; E6F3F5B622D37D28003D86FA /* SwiftInjector.h in Headers */ = {isa = PBXBuildFile; fileRef = E6F3F5A822D37D28003D86FA /* SwiftInjector.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -39,6 +42,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + E6787CAF22D6718F006B7C5B /* ContainerableProtocolTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerableProtocolTests.swift; sourceTree = ""; }; + E6787CBB22D75D02006B7C5B /* ProtocolViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProtocolViewController.swift; sourceTree = ""; }; + E6787CBD22D75D11006B7C5B /* ProtocolTestClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProtocolTestClass.swift; sourceTree = ""; }; E6F3F5A522D37D28003D86FA /* SwiftInjector.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftInjector.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E6F3F5A822D37D28003D86FA /* SwiftInjector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftInjector.h; sourceTree = ""; }; E6F3F5A922D37D28003D86FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -107,6 +113,8 @@ E6F3F5C222D37D9D003D86FA /* Container.swift */, E6F3F5CC22D37DC4003D86FA /* TestClass.swift */, E6F3F5CB22D37DC4003D86FA /* ViewController.swift */, + E6787CBB22D75D02006B7C5B /* ProtocolViewController.swift */, + E6787CBD22D75D11006B7C5B /* ProtocolTestClass.swift */, E6F3F5BF22D37D9D003D86FA /* Containerable.swift */, E6F3F5C022D37D9D003D86FA /* DIContainer.swift */, E6F3F5C322D37D9D003D86FA /* RootContainer.swift */, @@ -121,6 +129,7 @@ isa = PBXGroup; children = ( E6F3F5B322D37D28003D86FA /* SwiftInjectorTests.swift */, + E6787CAF22D6718F006B7C5B /* ContainerableProtocolTests.swift */, E6F3F5D522D37DE5003D86FA /* ContainerableFormattedStringTests.swift */, E6F3F5CF22D37DE5003D86FA /* ContainerableMainTests.swift */, E6F3F5D022D37DE5003D86FA /* ContainerablePropertyNameTests.swift */, @@ -244,6 +253,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E6787CBC22D75D02006B7C5B /* ProtocolViewController.swift in Sources */, E6F3F5CE22D37DC4003D86FA /* TestClass.swift in Sources */, E6F3F5C722D37D9D003D86FA /* TestContainer.swift in Sources */, E6F3F5C822D37D9D003D86FA /* Container.swift in Sources */, @@ -251,6 +261,7 @@ E6F3F5CA22D37D9D003D86FA /* SILogger.swift in Sources */, E6F3F5CD22D37DC4003D86FA /* ViewController.swift in Sources */, E6F3F5C622D37D9D003D86FA /* DIContainer.swift in Sources */, + E6787CBE22D75D11006B7C5B /* ProtocolTestClass.swift in Sources */, E6F3F5C522D37D9D003D86FA /* Containerable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -264,6 +275,7 @@ E6F3F5D922D37DE5003D86FA /* ContainerablePropertyTests.swift in Sources */, E6F3F5DE22D37DE5003D86FA /* ContrainerableManualRegistrationTests.swift in Sources */, E6F3F5D722D37DE5003D86FA /* ContainerableMainTests.swift in Sources */, + E6787CB022D6718F006B7C5B /* ContainerableProtocolTests.swift in Sources */, E6F3F5DC22D37DE5003D86FA /* ContainerableRegisterTests.swift in Sources */, E6F3F5B422D37D28003D86FA /* SwiftInjectorTests.swift in Sources */, E6F3F5DA22D37DE5003D86FA /* ContainerableRecordRelationsTests.swift in Sources */, diff --git a/SwiftInjector.xcodeproj/project.xcworkspace/xcuserdata/ghost.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftInjector.xcodeproj/project.xcworkspace/xcuserdata/ghost.xcuserdatad/UserInterfaceState.xcuserstate index 6d93b1727f7ba8836298e28d874082ef3c9242ae..4cd8ac7962e1a2931f95f54d3aea9d837faeb41b 100644 GIT binary patch delta 13201 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 F{{v-cC>Q_$ delta 6452 zcmZu#34Baf7r)C)W|G<7do%A@CbLg0AsRa|Llmvl(n>lcEiF|gRn@Ah(uI~eP*W6znxU6aG-{4opq8i`dIi0Tx}!Ms8tQ?1qG2cvr6Ug-jxx}j zC=-o9Z=uo1i)NyC&|LH$T7(v(6{s8)q6)MItwrn6W>kr`qn&6UI*2|)U!YT{8l6So zp-bp8`UU;!MOV=y^cX$C2xCkz#WF0%JQlDX8?cD$VJo&_J9gkExG9dp(YQHog=26m z?uxtPp12q8gX3`m9)Jhq6r6_Bu?OekJUklb;{xo%Q}9$=gs0)@cqX2M=i-HU1uns* zxD1!$3cLY(H{y@cBwUHB@D98W@5hJnSNJ48h0oz1@OgX@U%^-LANWuFgdl$5Rq7jmDor_5=B~)_9TYHlCI=6(u4FSiDV#2Cmu4Kj3T)tk4z$yNgO3Fw%sUR!Khh#n3Ms|>$WG~rAz97fRm*fQbihNDJCqI)*N@vq%YBE+J?5J?PyQhi}t3k(>G`z8c!2w zBJE52(IncR4xni?oqFi2!)Z1hN5|6%bRwNZC(}auHl0b|p~Z9|eUC1pi)k4xrxkQH z-A+HDRdfg4N%ztN^iz6}en!8fr|4<=J^j(&UFMd-Cy?ZSM>a{73)>(BhC?o-RSI$| z?&Ly|t5Ivz2DL@)P0=6ps>6BI=9!fdqA+F4TkiV1#fmfq59WvBl#O&K2aQ6xD9`Uv_OP}91XgJM4a!Fa z?9muB7L8+%bI?RI2~9?Y{;!n1%`Ko6hr!07(+H4{nN2}cQ4yMkrlT3Ci{BL*AKDBY z&>ZX#>0cDuE~yyJDMz!=Z1gTTp%FBJsA@D1&1Wb z4kDldG)&?2U2?MXQ!}$Yd8xy)Jk3Ur%^aT3$xfjq=zX*lec*2p)|xIu%l*k=k=`1A zCG5QyLSvS}hC>np=5g60JZbqkd9?vo1`V3NXi(#I9r`e-cS7g9ywve!XdPN!jXq*1 zH=vE^V>D_|dQMuwNCvfUe9r;-nIk=;^HWETf|no~5KZCU@Izyl{}q*_2;kd-w)zWI zlDrIUV+adXb%Udypep||RTSO9#*V9^+WmK$cd3H(;a3*yvt$GyXU_fg(%Mm(aEpeFg2< zvOiWwclsKA6Bs=W?Mu-ah=H`kUM$7cNE3|pJ^B$z<>(yx0iA~q-~x9!y1;UF5jwJ* zr8BmV)C^1bEr95E=oDDUnt6Yq+X2G=iLRmR=r42w-9)z_7COVr&;`0eH+W?=`WxLr zchNnz=nv38@G5kN{*c1fdMKnaY{yfEtowy;A z%5Vg3011#-h8y9=&=>kK&u4W;Z!(COu?xF#M;Hi$VDSGizlP|w+Z=uKvoPpoOnRo=e37Ieg-m1V^cqGooIgkaT0l>!y zu$k}JcnqExupW!Y;qiC^jD&2+fl(DGf-Qd`YQ(fF67raurTOa#g_aq?WvY$z4xYt` zjf)|_6wihNW^+YfzwJD{pbXE)ei#Fjz*}qk9)6$E952F)@e&vd<6wL_UWyvwWiWwx zpU7yS(08}3#A{!$TF0!`!(?Vv$gD=`#Ww6~$D8ox)NebdL|P)M{MTMf3dw9pLt>Kwv#JBKm{5Q-8 zKP-TS@E$CJ#jEjM2L3){MFf6`AHfp#67RD!7fN9jOJbFHn^%%BB$bj-SXxR{@Bv$^ zJyLyMM|hTS!ojjqBEWKH`;$ww6N%JEk>#j_)Ft&;^;iKV^5+u`K@)#UORC< za~T0;kn|KWX+$EQd2Isa&oV@sk!bb+l|bWC(i|$DKWIhT1ZK2`m8HQTfs}QPdsgmh zN?on{4#XXZ+bZ}j9bxtJz@5p<|5_5#jl3H0`wFZrCEZ~i10HE@oJxA)1trgzL|!L- zm{IUUA@Q&t(t_VK>5CVXlYS(L^oNh&W2k&SVGv3AU;2=ts1X?k8yNLAvfOeuhn-}Q zw_Y&IVrJQ}iJ5I?W=S@)os1@9UoacT%qGAVX10}?EwP1%o+4hPBS3tWcWjB6%x+WJ z({Z18VS7-M$W&4^pt zJlA7V71Z9tDO{gm^ROgR=Z}q48lDL@*%LJQEQRYGG{|hKkFKe>WIs8~q>>yUpOS;* z5FCYL@C6*NAV&hVk{pFEgSGN228-3o?&Ks>Y;p=tJgt@FG^>@YwgeBRM>R)nIVa}` zYXew$B^~+OG)WkqhGhBWO zirW5f^HA%(5p7ZfD3SsC^}qUs{{d8M-<-B&-z;qbzn9Wha0QZvFn#TvI?}`BE;Bo0 zi2tI?@EUDTUq;dz8bdo!7j@H)v=fb`o#7Ao6RyE^_zP~pO}Mp&c3~}j1bv0RO1slI zRt9e~YUaYUo`LG(&9I;%@{P-B_zuJ8Ns90qzUBWg6FT!3*$9xkA6fq1acwxu%4yE zhYda~uA=!kn{K9+tfk3jsbLKbmVCG_>ui9f{94iqFWrT7bT{1-Xutw{2S?}qBOX0i zJ!HNQ*9l4*-ADJ=sF$aV?nBFy6LZp2$6HhLt<77;v~I&)392+bgcp<|9?0`m`kWqP zIusZyrC<11=Ub!a^u#kuHnTm8ULC9gHEzBMY{~v18|hird>`>)3+qgu>k>U5kR2bk z{#%$ryhzFZX<|oB**{BS*ygnl>W2oSWVV-IN4B#){84g}d_%q^-;p25PizN&neEga zY;WF)cBWluH^$#M+Jo)T2h(K6%3*9jKAf>|1kGYw@m=(?jFYvH^_FGIrpV^Vmdi?H zWwHv{D%l#@I@x;JPT6jmcdu-}>{Hnx*%8_2vSYHdvOi=`~=iqUff0RS~D?;Z^if3{w;+iWG|! zm5Qy3?TRYJPQ`A;b;Ui!6D3wsrCg~{8k81ggtDQsv9gJ>v$Bh_r!q-7ROwX~Da)1X zl~u}}%H7Jn%HzuKl;@P^l^2xPly{X+LS>Zux_8mvlIrK-|Y9@PldSXH44R8v$%s$$h_)g0A4m0z`2bw+hvbx-w=>XGV+TCFy! zO=^qUrgo?!)D6{*)$P0fC)f8#UHS0ASHJdb*nq8Vhnj@OeHODl^H77JDHPxDP zn%_0oG=FJsYVK<8YyQzZ(o(IUHEP4PX01&dscoxuY5Qmsw0*Tn+5y@@+H~z(TJK10 zjy6|2S_|4K+9K_AtzWxPyGXl4yGpx8yH2}ayF+_K`?>a*_PF+fj?Ne>rbz61Yb^CM&bO&{Zb)V^u>Z)~D zb$2+#X*h|i%hl(?IWyPL%Qfbja8cY#TyySqE{mJPt>M;ko4HDED|di9#2w*|a$j&? zau>O)++W;H?lyOar+gT%=CwS>*Wv5&M&86*_$WSx@5T4yQ}`@?G+)4v<;U~DPvMLB z>HORLe10ik!B_G-_#^yL{tNyDf0D1}f8}rU-n;yL{vrQZK!QOq33kCLG!PmItp%6R zQHT{@7UF~+LNDQUp^q>~NEdR2al!;)l29m26J`iAg<@g0utHcPY!$W%+l4COuy9N` zE}Rg)7QPX_6}}U$>3MxCeP{g}`gnb!zMsCoexQD^K3P9fpQF#!kJcA>^<(wp^%M1z z^|SOJ>JR9DG4KY5A>NQ_7-JZ3m}n?8fMJSZfuYn;VOV8YYxvOckzuFdGs6kPNkg^a zwBelLyy1f3qT!O^vf+WK5W_^Zs1tcnFIq*17$G(iBgLj-d(kC!6g!Ju#BO4|*jG#v z2a1EmWHC?ldc`SXkvKz~DHe;1#UDgYR~ju9NRy;O38X1f zku+agDy@+=N}HrgX{)qL+9U1rN(ZEa(i!Q3^t*J!*v=SZ>|*R=>~BmlW*NOkpK+>j znsJ74rm@&K+c?KK&sbqxWn5!iXIyXGVBBQfV%%=rVccb`HvVON6mAHAHGDw$nDDp5 z%fmkouMFQB{z>?b@Ll15gx@zI6EVq5AtsGUXW~tIlW4M=oTdgQZzIzr(@aybX|`#O z>4ND`(;d@2(*x5((_^#39BNjXHD;ZeH#ajUn#Y+JnM=&&=9T8v=8w%)=AGu<=Dp_q z=1A}kFpT`eOl?^-^x zY_n8Zc3O6OEr%^9EGI41meZCqma~@cEk9VUSgu=cSZ-PFSsqv(S{_?9R?cd&Hn29b zMp~O%n_1gh+gm$W-PTUl&emjWk#&vri1jOLwe__1jP-)`ck5N_pVsTv8`fJkWRu$z zwosea#@Pg$!RD|<+gjRM+uGS;Y%betw*EG+$2P_`&Njg|$yR6s+Z0=oZMtodZHaBE zZJBL_t<+X-TWMQuTWhPd?XjJ)U9(erU3;`W&Yof~v9Gpouvgg++mG8%*iYK4?cdqY z*?+WOv|n=6akOysa3nfX9I1|UM}}jBW27U;G08F2G0pL|qu4RuvCy&DvDC55>p1MV z?X)@@JENT)ojsiK&O~RDbD%TTneNPRj&No<3!Gz}lb!E4=Q;h(_nb?dCC+l^D(70~ zht4g|?ao8aQ_i!_@15tJKRJJMUUgn`-f-S>K8&Cd>JGO%+;LGC=Mr3^tFFuFGP`W9 zX0GP0maaCg_O1>tx2uyYC*3vERq6V{^^5D8>#pm8o4Ui?I=9(vbvJf5bvJWIyWQ?s z_si~X?(Xi_+zIY}?*8t9?lgD0d$>EtJ;puGJ;6QM?RC#`zw4gs_SbY#gw$N=g_>*a IZ}+eN0ax3kR{#J2 diff --git a/SwiftInjector/Containerable.swift b/SwiftInjector/Containerable.swift index 0388a1e..45ba18c 100644 --- a/SwiftInjector/Containerable.swift +++ b/SwiftInjector/Containerable.swift @@ -31,12 +31,15 @@ public struct ContainerObject { var registrationType: RegistrationType var registration: Containerable.Service var object: Containerable.Object? = nil + var type: Containerable.Object.Type init(_ registration: @escaping Containerable.Service, name: String? = nil, - registrationType: RegistrationType) { + registrationType: RegistrationType, + objectType: Containerable.Object.Type) { self.registration = registration self.name = name self.registrationType = registrationType + self.type = objectType } } @@ -74,17 +77,31 @@ public extension Containerable { return object } else { + // There is no object with this protocol. (if it's really a protocol) Let's find out first class, conformable to protocol + + for service in services { + for object in service.value { + + let isConforms = (object.object as? TestClassProtocol) != nil || (object.registration() as? TestClassProtocol) != nil + if isConforms { + return resolveAny(typeString: service.key, name: name) + } + } + } + return nil } } - func resolve(name: String? = nil) -> T? { + func resolve(name: String? = nil, objectType: T.Type? = nil) -> T? { let key = String(describing: T.self) +// let protocolToResolve: Protocol? = objectType let object = resolveAny(typeString: key, name: name) as? T return object } + func finishRegistrations() { relations = [:] for object in recursiveNotResolvedObjects { @@ -119,7 +136,7 @@ public extension Containerable { } } - private func memmoryAddress(_ object: Object) -> String { + func memmoryAddress(_ object: Object) -> String { return "\(Unmanaged.passUnretained(object).toOpaque())" } @@ -176,10 +193,16 @@ public extension Containerable { let key = String(describing: type(of: object)) if let array = services[key] { var newArray = array - newArray.append(ContainerObject(registration, name: name, registrationType: registrationType)) + newArray.append(ContainerObject(registration, + name: name, + registrationType: registrationType, + objectType: T.self)) services[key] = newArray } else { - services[key] = [ContainerObject(registration, name: name, registrationType: registrationType)] + services[key] = [ContainerObject(registration, + name: name, + registrationType: registrationType, + objectType: T.self)] } dispatchRegistrationGroup.leave() } diff --git a/SwiftInjector/ProtocolTestClass.swift b/SwiftInjector/ProtocolTestClass.swift new file mode 100644 index 0000000..19d3529 --- /dev/null +++ b/SwiftInjector/ProtocolTestClass.swift @@ -0,0 +1,19 @@ +// +// ProtocolTestClass.swift +// SwiftInjector +// +// Created by Ghost on 11.07.2019. +// Copyright © 2019 Ghost. All rights reserved. +// + +import Foundation + +protocol TestClassProtocol { + +} + +class ProtocolTestClass: TestClassProtocol, Equatable { + static func == (lhs: ProtocolTestClass, rhs: ProtocolTestClass) -> Bool { + return "\(Unmanaged.passUnretained(lhs).toOpaque())" == "\(Unmanaged.passUnretained(rhs).toOpaque())" + } +} diff --git a/SwiftInjector/ProtocolViewController.swift b/SwiftInjector/ProtocolViewController.swift new file mode 100644 index 0000000..60113e2 --- /dev/null +++ b/SwiftInjector/ProtocolViewController.swift @@ -0,0 +1,13 @@ +// +// ViewControllerProtocolTests.swift +// SwiftInjector +// +// Created by Ghost on 11.07.2019. +// Copyright © 2019 Ghost. All rights reserved. +// + +import UIKit + +class ProtocolViewController: UIViewController { + var testClass: TestClassProtocol? +} diff --git a/SwiftInjector/TestClass.swift b/SwiftInjector/TestClass.swift index c76207f..131af41 100644 --- a/SwiftInjector/TestClass.swift +++ b/SwiftInjector/TestClass.swift @@ -16,3 +16,21 @@ class TestClass: Equatable { return "\(Unmanaged.passUnretained(lhs).toOpaque())" == "\(Unmanaged.passUnretained(rhs).toOpaque())" } } + + +//protocol TestClassable { +// +//} +// +//class VC1 { +// var testClassable: TestClassable? +//} +// +//class ProtocoledTestClass: TestClass { +// var name: String = "123" +// weak var viewController: TestClassable? +// +// static func == (lhs: TestClass, rhs: TestClass) -> Bool { +// return "\(Unmanaged.passUnretained(lhs).toOpaque())" == "\(Unmanaged.passUnretained(rhs).toOpaque())" +// } +//} diff --git a/SwiftInjectorTests/ContainerableProtocolTests.swift b/SwiftInjectorTests/ContainerableProtocolTests.swift new file mode 100644 index 0000000..7cf3411 --- /dev/null +++ b/SwiftInjectorTests/ContainerableProtocolTests.swift @@ -0,0 +1,33 @@ +// +// ContainerableProtocolTest.swift +// SwiftInjectorTests +// +// Created by Ghost on 10.07.2019. +// Copyright © 2019 Ghost. All rights reserved. +// + +import XCTest +@testable import SwiftInjector + +class ContainerableProtocolTests: XCTestCase { + + override func setUp() { + + } + + func testExampleProtocolInheritance() { + let containerable: Containerable = RootContainer() + containerable.register ({ ProtocolViewController() }) + containerable.register ({ ProtocolTestClass() }) + let vc: ProtocolViewController? = containerable.resolve() + XCTAssertNotNil(vc) + let testClass = containerable.resolve(objectType: TestClassProtocol.self) + + XCTAssertNotNil(testClass) + + XCTAssertNotNil(vc?.testClass) + XCTAssertEqual(containerable.memmoryAddress(vc?.testClass as AnyObject), containerable.memmoryAddress(testClass! as AnyObject)) + + } +} +