Mercurial > public > lazybear
changeset 416:1662a41e2c1a
KeyStatsView implemented
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Wed, 09 Jun 2021 20:26:28 +0200 |
parents | 34f9e408b861 |
children | 5f21f7c23c5e |
files | LazyBear.xcodeproj/project.pbxproj LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate LazyBear/Global Models/DisplayWordsModel.swift LazyBear/Global Models/KeyStatsModel.swift LazyBear/Resources/DisplayWords.json LazyBear/Views/Company/Helpers/StatsView.swift |
diffstat | 6 files changed, 148 insertions(+), 69 deletions(-) [+] |
line wrap: on
line diff
--- a/LazyBear.xcodeproj/project.pbxproj Wed Jun 09 12:49:17 2021 +0200 +++ b/LazyBear.xcodeproj/project.pbxproj Wed Jun 09 20:26:28 2021 +0200 @@ -69,6 +69,8 @@ 95A7C066261639E0003E2EC1 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A7C065261639DF003E2EC1 /* SearchView.swift */; }; 95A7C0742616409D003E2EC1 /* ParseJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A7C0732616409D003E2EC1 /* ParseJSON.swift */; }; 95AD4A2D26078C1400498079 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AD4A2C26078C1400498079 /* ContentView.swift */; }; + 95AF0FF72671320F0049C4AB /* DisplayWords.json in Resources */ = {isa = PBXBuildFile; fileRef = 95AF0FF62671320F0049C4AB /* DisplayWords.json */; }; + 95AF0FF92671342E0049C4AB /* DisplayWordsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */; }; 95BB05B22670B8C3005A2029 /* KeyStatsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */; }; 95BD2FAE26341BD1008B6752 /* TextfieldAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BD2FAD26341BD1008B6752 /* TextfieldAlert.swift */; }; 95BD2FB326341D36008B6752 /* BlurBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BD2FB226341D36008B6752 /* BlurBackground.swift */; }; @@ -174,6 +176,8 @@ 95A7C065261639DF003E2EC1 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; }; 95A7C0732616409D003E2EC1 /* ParseJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseJSON.swift; sourceTree = "<group>"; }; 95AD4A2C26078C1400498079 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; }; + 95AF0FF62671320F0049C4AB /* DisplayWords.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = DisplayWords.json; sourceTree = "<group>"; }; + 95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayWordsModel.swift; sourceTree = "<group>"; }; 95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyStatsModel.swift; sourceTree = "<group>"; }; 95BD2FAD26341BD1008B6752 /* TextfieldAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextfieldAlert.swift; sourceTree = "<group>"; }; 95BD2FB226341D36008B6752 /* BlurBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurBackground.swift; sourceTree = "<group>"; }; @@ -292,6 +296,7 @@ isa = PBXGroup; children = ( 9523ED412615BDB2006D3D6F /* phrases.json */, + 95AF0FF62671320F0049C4AB /* DisplayWords.json */, ); path = Resources; sourceTree = "<group>"; @@ -320,6 +325,7 @@ 95602703265ABB990046F97E /* InsiderRosterModel.swift */, 95CCFB55266E7A0F00C384A1 /* InsiderTransactionModel.swift */, 95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */, + 95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */, ); path = "Global Models"; sourceTree = "<group>"; @@ -666,6 +672,7 @@ files = ( 95672B9625DDA54700DCBE4A /* Preview Assets.xcassets in Resources */, 9523ED422615BDB2006D3D6F /* phrases.json in Resources */, + 95AF0FF72671320F0049C4AB /* DisplayWords.json in Resources */, 95672B9325DDA54700DCBE4A /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -750,6 +757,7 @@ 95672B9B25DDA54800DCBE4A /* LazyBear.xcdatamodeld in Sources */, 95C8C0E0262A369F0082D1D9 /* ProfileResponse.swift in Sources */, 95A4B935263EA31C0056F036 /* WatchlistCreatorSearchBar.swift in Sources */, + 95AF0FF92671342E0049C4AB /* DisplayWordsModel.swift in Sources */, 95AD4A2D26078C1400498079 /* ContentView.swift in Sources */, 95CCFB5A266E841B00C384A1 /* TransactionRow.swift in Sources */, 95629DA02645298E007AF020 /* Profile.swift in Sources */,
Binary file LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/Global Models/DisplayWordsModel.swift Wed Jun 09 20:26:28 2021 +0200 @@ -0,0 +1,12 @@ +// +// DisplayWordsModel.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 9/6/21. +// + +import SwiftUI + +struct DisplayWordsModel: Codable { + var keyStats: [String: String] +}
--- a/LazyBear/Global Models/KeyStatsModel.swift Wed Jun 09 12:49:17 2021 +0200 +++ b/LazyBear/Global Models/KeyStatsModel.swift Wed Jun 09 20:26:28 2021 +0200 @@ -8,30 +8,42 @@ import SwiftUI struct KeyStatsModel: Codable { - var avg10Volume, avg30Volume: Int? - var beta: Double? var companyName: String? - var day200MovingAvg, day30ChangePercent, day50MovingAvg, day5ChangePercent: Double? - var dividendYield: Double? var employees: Int? - var exDividendDate: String? - var float, marketcap: Int? - var maxChangePercent, month1ChangePercent, month3ChangePercent, month6ChangePercent: Double? - var nextDividendDate, nextEarningsDate: String? - var peRatio: Double? + var marketcap: Int? + var float: Int? var sharesOutstanding: Int? - var ttmDividendRate, ttmEPS, week52Change, week52High: Double? - var week52HighSplitAdjustOnly, week52Low: Double? - var week52LowSplitAdjustOnly: Double? - var year1ChangePercent, year2ChangePercent, year5ChangePercent, ytdChangePercent: Double? + + var beta: Double? + var peRatio: Double? + var dividendYield: Double? + var ttmDividendRate: Double? + var ttmEPS: Double? + + var avg10Volume: Int? + var avg30Volume: Int? - enum CodingKeys: String, CodingKey { - case avg10Volume, avg30Volume, beta, companyName, day200MovingAvg, day30ChangePercent, day50MovingAvg, day5ChangePercent, dividendYield, employees, exDividendDate, float, marketcap, maxChangePercent, month1ChangePercent, month3ChangePercent, month6ChangePercent, nextDividendDate, nextEarningsDate, peRatio, sharesOutstanding, ttmDividendRate, ttmEPS - case week52Change = "week52change" - case week52High = "week52high" - case week52HighSplitAdjustOnly = "week52highSplitAdjustOnly" - case week52Low = "week52low" - case week52LowSplitAdjustOnly = "week52lowSplitAdjustOnly" - case year1ChangePercent, year2ChangePercent, year5ChangePercent, ytdChangePercent - } + var day50MovingAvg: Double? + var day200MovingAvg: Double? + + var week52Change: Double? + var week52High: Double? + var week52Low: Double? + var week52HighSplitAdjustOnly: Double? + var week52LowSplitAdjustOnly: Double? + + var maxChangePercent: Double? + var ytdChangePercent: Double? + var day5ChangePercent: Double? + var day30ChangePercent: Double? + var month1ChangePercent: Double? + var month3ChangePercent: Double? + var month6ChangePercent: Double? + var year1ChangePercent: Double? + var year2ChangePercent: Double? + var year5ChangePercent: Double? + + var exDividendDate: String? + var nextDividendDate: String? + var nextEarningsDate: String? }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/Resources/DisplayWords.json Wed Jun 09 20:26:28 2021 +0200 @@ -0,0 +1,37 @@ +{ + "keyStats": + { + "avg10Volume": "10 days average volume", + "avg30Volume": "30 days average volume", + "beta": "Beta", + "companyName": "Company Name", + "day200MovingAvg": "200 days moving average", + "day30ChangePercent": "30 days change percent", + "day50MovingAvg": "50 days moving average", + "day5ChangePercent": "Percent change in 5 days", + "dividendYield": "Dividend yield", + "employees": "Employees", + "exDividendDate": "Ex dividend date", + "float": "Float", + "marketcap": "Market cap", + "maxChangePercent": "Max change percent", + "month1ChangePercent": "Percent change in 1 month", + "month3ChangePercent": "Percent change in 3 months", + "month6ChangePercent": "Percent change in 6 months", + "nextDividendDate": "Next dividend date", + "nextEarningsDate": "Next earnings date", + "peRatio": "PE ratio", + "sharesOutstanding": "Shares outstanding", + "ttmDividendRate": "TTM dividend rate", + "ttmEPS": "TTM EPS", + "week52Change": "Change in 52 weeks", + "week52High": "52 weeks high", + "week52HighSplitAdjustOnly": " 52 weeks high (Split adjust only)", + "week52Low": "52 weeks low", + "week52LowSplitAdjustOnly": " 52 weeks low (Split adjust only)", + "year1ChangePercent": "Percent change in 1 year", + "year2ChangePercent": "Percent change in 2 year", + "year5ChangePercent": "Percent change in 5 year", + "ytdChangePercent": "YTD percent change" + } +}
--- a/LazyBear/Views/Company/Helpers/StatsView.swift Wed Jun 09 12:49:17 2021 +0200 +++ b/LazyBear/Views/Company/Helpers/StatsView.swift Wed Jun 09 20:26:28 2021 +0200 @@ -10,27 +10,23 @@ struct StatsView: View { var keyStats: KeyStatsModel @Environment(\.presentationMode) private var presentationStatsView + let displayWords: DisplayWordsModel = parseJSON("DisplayWords.json") var body: some View { NavigationView { Form { let mirror = Mirror(reflecting: keyStats) ForEach(Array(mirror.children), id: \.label) { child in - HStack { - let label = String(child.label!) - - Text("\(label)".capitalized) - .fontWeight(.semibold) - - // Unwrap optional value - if let doubleValue = child.value as? Double { - Text("\(doubleValue)") - } else if let intValue = child.value as? Int { - Text("\(intValue)") - } else if let stringValue = child.value as? String { - Text("\(stringValue)") - } else { - Text("NaN") + if let unwrappedValue = unwrapAnyOptional(value: child.value) { + HStack { + let label = String(child.label!) + Text("\(displayWords.keyStats[label]!):") + .font(.callout) + .fontWeight(.semibold) + + Spacer() + Text(unwrappedValue) + .font(.callout) } } } @@ -47,44 +43,58 @@ } } } + + /* + Unwrap optional Int, Double, String into String + */ + private func unwrapAnyOptional(value: Any) -> String? { + if let value = value as? Int { + return "\(value)" + } else if let value = value as? Double { + return String(format: "%.3f", value) + } else { + return value as? String + } + } } struct StatsView_Previews: PreviewProvider { static var previews: some View { StatsView(keyStats: - KeyStatsModel(avg10Volume: 123, - avg30Volume: 123, - beta: 123.12, - companyName: "Apple inc", - day200MovingAvg: 123.4, - day30ChangePercent: 123.4, - day50MovingAvg: 123.4, - day5ChangePercent: 123.4, - dividendYield: 123.4, - employees: 123, - exDividendDate: "2020-01-01", - float: 123, - marketcap: 123, - maxChangePercent: 123.4, - month1ChangePercent: 123.4, - month3ChangePercent: 123.4, - month6ChangePercent: 123.4, - nextDividendDate: "2020-01-01", - nextEarningsDate: "2020-01-01", - peRatio: 123.4, - sharesOutstanding: 123, - ttmDividendRate: 123.4, - ttmEPS: 123.4, - week52Change: 123.4, - week52High: 123.4, - week52HighSplitAdjustOnly: 123.4, - week52Low: 123.4, - week52LowSplitAdjustOnly: 123.4, - year1ChangePercent: 123.4, - year2ChangePercent: 123.4, - year5ChangePercent: 123.4, - ytdChangePercent: 123.4 + KeyStatsModel( + companyName: "Apple inc", + employees: 123, + marketcap: 123, + float: 123, + sharesOutstanding: 123, + beta: 123.12, + peRatio: 123.4, + dividendYield: 123.4, + ttmDividendRate: 123.4, + ttmEPS: 123.4, + avg10Volume: 123, + avg30Volume: 123, + day50MovingAvg: 123.4, + day200MovingAvg: 123.4, + week52Change: 123.4, + week52High: 123.4, + week52Low: 123.4, + week52HighSplitAdjustOnly: 123.4, + week52LowSplitAdjustOnly: 123.4, + maxChangePercent: 123.4, + ytdChangePercent: 123.4, + day5ChangePercent: 123.4, + day30ChangePercent: 123.4, + month1ChangePercent: 123.4, + month3ChangePercent: 123.4, + month6ChangePercent: 123.4, + year1ChangePercent: 123.4, + year2ChangePercent: 123.4, + year5ChangePercent: 123.4, + exDividendDate: "2020-01-01", + nextDividendDate: "2020-01-01", + nextEarningsDate: "2020-01-01" ) ) }