File tree Expand file tree Collapse file tree 2 files changed +33
-1
lines changed
Expand file tree Collapse file tree 2 files changed +33
-1
lines changed Original file line number Diff line number Diff line change @@ -626,6 +626,25 @@ public struct LazyInjected<Service> {
626626 }
627627}
628628
629+ @propertyWrapper
630+ public struct OptionalInjected < Service> {
631+ private var service : Service ?
632+ public init ( ) {
633+ self . service = Resolver . optional ( Service . self)
634+ }
635+ public init ( name: String ? = nil , container: Resolver ? = nil ) {
636+ self . service = container? . optional ( Service . self, name: name) ?? Resolver . optional ( Service . self, name: name)
637+ }
638+ public var wrappedValue : Service ? {
639+ get { return service }
640+ mutating set { service = newValue }
641+ }
642+ public var projectedValue : OptionalInjected < Service > {
643+ get { return self }
644+ mutating set { self = newValue }
645+ }
646+ }
647+
629648/// Immediate injection property wrapper for SwiftUI ObservableObjects. This wrapper is meant for use in SwiftUI Views and exposes
630649/// bindable objects similar to that of SwiftUI @observedObject and @environmentObject.
631650///
Original file line number Diff line number Diff line change @@ -35,6 +35,14 @@ class LazyInjectedViewController {
3535 @LazyInjected var service : XYZService
3636}
3737
38+ class OptionalInjectedViewController {
39+ @OptionalInjected var service : XYZService ?
40+ @OptionalInjected var notRegistered : NotRegistered ?
41+ }
42+
43+ class NotRegistered {
44+ }
45+
3846class ResolverInjectedTests : XCTestCase {
3947
4048 override func setUp( ) {
@@ -84,7 +92,12 @@ class ResolverInjectedTests: XCTestCase {
8492 XCTAssertNotNil ( vc. service. session)
8593 XCTAssert ( !vc. $service. isEmpty)
8694 }
87-
95+
96+ func testOptionalInjection( ) {
97+ let vc = OptionalInjectedViewController ( )
98+ XCTAssertNotNil ( vc. service)
99+ XCTAssertNil ( vc. notRegistered)
100+ }
88101}
89102
90103#endif
You can’t perform that action at this time.
0 commit comments