Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feature/AppStorage development is done #69

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions AltSwiftUI.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@
2CD1A04C2512066D00E2CCBA /* ViewEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CD1A00B2512066D00E2CCBA /* ViewEnvironment.swift */; };
2CD1A04E2512066D00E2CCBA /* AltSwiftUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CD1A00D2512066D00E2CCBA /* AltSwiftUI.h */; settings = {ATTRIBUTES = (Public, ); }; };
2CD1A056251206C200E2CCBA /* ViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CD1A054251206C200E2CCBA /* ViewTests.swift */; };
3047F8BB25FA15B800F3B5EF /* AppStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3047F8BA25FA15B800F3B5EF /* AppStorage.swift */; };
30BFBD9F2654E1430023274F /* AppStorageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30BFBD9E2654E1430023274F /* AppStorageTests.swift */; };
68CBD3E12578AADB00A3F033 /* SecureField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68CBD3E02578AADB00A3F033 /* SecureField.swift */; };
7D2D4D6B25148269000F5DDC /* Capsule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D2D4D6525148269000F5DDC /* Capsule.swift */; };
7D2D4D6C25148269000F5DDC /* Circle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D2D4D6625148269000F5DDC /* Circle.swift */; };
Expand Down Expand Up @@ -166,6 +168,8 @@
2CD1A00D2512066D00E2CCBA /* AltSwiftUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AltSwiftUI.h; sourceTree = "<group>"; };
2CD1A054251206C200E2CCBA /* ViewTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewTests.swift; sourceTree = "<group>"; };
2CD1A055251206C200E2CCBA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3047F8BA25FA15B800F3B5EF /* AppStorage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppStorage.swift; sourceTree = "<group>"; };
30BFBD9E2654E1430023274F /* AppStorageTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppStorageTests.swift; sourceTree = "<group>"; };
68CBD3E02578AADB00A3F033 /* SecureField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureField.swift; sourceTree = "<group>"; };
7D2D4D6525148269000F5DDC /* Capsule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Capsule.swift; sourceTree = "<group>"; };
7D2D4D6625148269000F5DDC /* Circle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Circle.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -282,6 +286,7 @@
2CD19FCE2512066D00E2CCBA /* State.swift */,
2CD19FD02512066D00E2CCBA /* StateObject.swift */,
2CD19FCA2512066D00E2CCBA /* StateTypes.swift */,
3047F8BA25FA15B800F3B5EF /* AppStorage.swift */,
);
path = State;
sourceTree = "<group>";
Expand Down Expand Up @@ -421,6 +426,7 @@
2CA33E61252E9718005A7C96 /* OperationQueueTests.swift */,
2CA33E56252E96BA005A7C96 /* ViewBinderTests.swift */,
2CD1A054251206C200E2CCBA /* ViewTests.swift */,
30BFBD9E2654E1430023274F /* AppStorageTests.swift */,
2CD1A055251206C200E2CCBA /* Info.plist */,
);
name = AltSwiftUITests;
Expand Down Expand Up @@ -630,6 +636,7 @@
2CD1A01A2512066D00E2CCBA /* State.swift in Sources */,
2CD1A0482512066D00E2CCBA /* NavigationViews.swift in Sources */,
7D2D4D6B25148269000F5DDC /* Capsule.swift in Sources */,
3047F8BB25FA15B800F3B5EF /* AppStorage.swift in Sources */,
2CD1A0242512066D00E2CCBA /* ViewPropertyBuilder.swift in Sources */,
2CD1A0292512066D00E2CCBA /* ViewPropertyAnimationTypes.swift in Sources */,
2CD1A0182512066D00E2CCBA /* Environment.swift in Sources */,
Expand All @@ -649,6 +656,7 @@
files = (
2CD1A056251206C200E2CCBA /* ViewTests.swift in Sources */,
2CA33E65252E9731005A7C96 /* OperationQueueTests.swift in Sources */,
30BFBD9F2654E1430023274F /* AppStorageTests.swift in Sources */,
2CA33E5C252E96BF005A7C96 /* ViewBinderTests.swift in Sources */,
2CA33E51252E964C005A7C96 /* IterationTests.swift in Sources */,
);
Expand Down
4 changes: 4 additions & 0 deletions Example/AltSwiftUIExample.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
2CE5E2A2231398DA0072F907 /* AltSwiftUIExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE5E2A1231398DA0072F907 /* AltSwiftUIExampleTests.swift */; };
2CE5E2AD231398DA0072F907 /* AltSwiftUIExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE5E2AC231398DA0072F907 /* AltSwiftUIExampleUITests.swift */; };
2CFE2AC025AD487800C925FC /* ScrollView2AxisExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CFE2ABF25AD487800C925FC /* ScrollView2AxisExampleView.swift */; };
3047F8C625FA15D300F3B5EF /* AppStorageExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3047F8C325FA15D300F3B5EF /* AppStorageExampleView.swift */; };
35D1A58825C7EDA100861DC4 /* AlertsExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D1A58525C7EDA100861DC4 /* AlertsExampleView.swift */; };
682C3A7C2594B18A005E798E /* SecureFieldExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 682C3A7B2594B18A005E798E /* SecureFieldExampleView.swift */; };
/* End PBXBuildFile section */
Expand Down Expand Up @@ -94,6 +95,7 @@
2CE5E2AC231398DA0072F907 /* AltSwiftUIExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AltSwiftUIExampleUITests.swift; sourceTree = "<group>"; };
2CE5E2AE231398DA0072F907 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2CFE2ABF25AD487800C925FC /* ScrollView2AxisExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollView2AxisExampleView.swift; sourceTree = "<group>"; };
3047F8C325FA15D300F3B5EF /* AppStorageExampleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppStorageExampleView.swift; sourceTree = "<group>"; };
35D1A58525C7EDA100861DC4 /* AlertsExampleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlertsExampleView.swift; sourceTree = "<group>"; };
682C3A7B2594B18A005E798E /* SecureFieldExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureFieldExampleView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -143,6 +145,7 @@
2CADC316251CA15400EA3F17 /* ShapesExampleView.swift */,
2C49E3CB2535382F00543E7D /* TextExampleView.swift */,
2CDCE7F225C40D2500BB52D1 /* StackUpdateExample.swift */,
3047F8C325FA15D300F3B5EF /* AppStorageExampleView.swift */,
);
path = ExampleViews;
sourceTree = "<group>";
Expand Down Expand Up @@ -372,6 +375,7 @@
2CADC30F251CA0DF00EA3F17 /* RamenExampleView.swift in Sources */,
2CADC317251CA15400EA3F17 /* ShapesExampleView.swift in Sources */,
2CFE2AC025AD487800C925FC /* ScrollView2AxisExampleView.swift in Sources */,
3047F8C625FA15D300F3B5EF /* AppStorageExampleView.swift in Sources */,
2CE5E28F231398D70072F907 /* ViewController.swift in Sources */,
2CE5E28B231398D70072F907 /* AppDelegate.swift in Sources */,
2CDCE7F325C40D2500BB52D1 /* StackUpdateExample.swift in Sources */,
Expand Down
86 changes: 86 additions & 0 deletions Example/AltSwiftUIExample/ExampleViews/AppStorageExampleView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
//
// AppStorageExampleView.swift
// AltSwiftUIExample
//
// Created by yang.q.wang on 2021/3/1.
// Copyright © 2021 Rakuten Travel. All rights reserved.
//

import AltSwiftUI

enum Day: Int {
case Monday,Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
enum Country: String {
case China = "China"
case Japan = "Japan"
}
struct AppStorageExampleView: View {
var viewStore = ViewValues()
@AppStorage("username" , store:UserDefaults(suiteName: "com.rakuten.www")) var username = "David"
@AppStorage("optionalBool") var optionalBool: Bool?
@AppStorage("initalInt") var initalInt:Int = 10
@AppStorage("today") var today = Day.Monday
var body: View {
VStack {
Text("\(self.username)")
TextField("Please enter your name", text: $username)
HStack{
if let tempOptionalBool = self.optionalBool {
if tempOptionalBool {
Text("I am optionalBool variable and I am true").multilineTextAlignment(.leading)
}else{
Text("I am optionalBool variable and I am false").multilineTextAlignment(.leading)
}
}else{
Text("I am optionalBool variable and I am nil").multilineTextAlignment(.leading)
}
Spacer()
Button("Set Value") {
if self.optionalBool == nil {
self.optionalBool = true
}else{
self.optionalBool = !self.optionalBool!
}
}
Button("Set nil Value") {
self.optionalBool = nil
}
}.padding()
HStack{
switch self.today {
case .Monday:
Text("I am Enum variable and today is Monday").multilineTextAlignment(.leading)
case .Tuesday:
Text("I am Enum variable and today is Tuesday").multilineTextAlignment(.leading)
case .Wednesday:
Text("I am Enum variable and today is Wednesday").multilineTextAlignment(.leading)
case .Thursday:
Text("I am Enum variable and today is Thursday").multilineTextAlignment(.leading)
case .Friday:
Text("I am Enum variable and today is Friday").multilineTextAlignment(.leading)
case .Saturday:
Text("I am Enum variable and today is Saturday").multilineTextAlignment(.leading)
case .Sunday:
Text("I am Enum variable and today is Sunday").multilineTextAlignment(.leading)
}
Spacer()
Button("Set Value") {
if self.today.rawValue < 6{
self.today = Day(rawValue: self.today.rawValue + 1)!
}else{
self.today = .Monday
}
}
}.padding()
HStack{
Text("I am IntialInt variable and value is \(self.initalInt)").multilineTextAlignment(.leading)
Spacer()
Button("Set Value") {
self.initalInt += 20
}
}.padding()
}
}
}

3 changes: 2 additions & 1 deletion Example/AltSwiftUIExample/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ struct ExampleView: View {
ExampleViewData(title: "Texts", destination: TextExampleView()),
ExampleViewData(title: "Navigation", destination: NavigationExampleView()),
ExampleViewData(title: "SecureField", destination: SecureFieldExampleView()),
ExampleViewData(title: "Stack Update", destination: StackUpdateExample())
ExampleViewData(title: "Stack Update", destination: StackUpdateExample()),
ExampleViewData(title: "AppStorage", destination: AppStorageExampleView())
]

var body: View {
Expand Down
10 changes: 10 additions & 0 deletions Sources/AltSwiftUI/Source/CoreUI/ViewBinder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class ViewBinder {
NotificationCenter.default.removeObserver(self, name: Self.StateNotification.name, object: origin)
NotificationCenter.default.addObserver(self, selector: #selector(handleStateNotification(notification:)), name: Self.StateNotification.name, object: origin)
}
func registerAppStorageNotification(origin: NotificationOrigin){
NotificationCenter.default.removeObserver(self, name: origin.Name, object: origin)
NotificationCenter.default.addObserver(self, selector: #selector(handleAppStoreNotification(notification:)), name: origin.Name, object: origin)
}

// MARK: - Private methods

Expand Down Expand Up @@ -83,6 +87,12 @@ class ViewBinder {
postRenderQueue.drainRecursively()
}
}
@objc private func handleAppStoreNotification(notification: Notification) {
if notification.name.rawValue.hasPrefix(AppStorageDefaultKey.defautPrefixDomainKey){
let transaction = notification.userInfo?[Self.StateNotification.transactionKey] as? Transaction
updateView(transaction: transaction)
}
}
@objc private func handleStateNotification(notification: Notification) {
if notification.name == Self.StateNotification.name {
let transaction = notification.userInfo?[Self.StateNotification.transactionKey] as? Transaction
Expand Down
Loading