From b8df69359569685ea73a8731c3a9d8ae3f59088a Mon Sep 17 00:00:00 2001 From: Paul Yi Date: Thu, 11 Oct 2018 12:30:32 -0700 Subject: [PATCH 1/5] Create Student.swift file --- .../JSONStudents.xcodeproj/project.pbxproj | 349 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 12033 bytes .../xcschemes/xcschememanagement.plist | 14 + JSONStudents/JSONStudents/AppDelegate.swift | 46 +++ .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ .../JSONStudents/Base.lproj/Main.storyboard | 24 ++ JSONStudents/JSONStudents/Info.plist | 45 +++ JSONStudents/JSONStudents/Student.swift | 9 + .../JSONStudents/StudentManager.swift | 16 + .../JSONStudents/ViewController.swift | 20 + 14 files changed, 667 insertions(+) create mode 100644 JSONStudents/JSONStudents.xcodeproj/project.pbxproj create mode 100644 JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 JSONStudents/JSONStudents.xcodeproj/xcuserdata/paulyi.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 JSONStudents/JSONStudents/AppDelegate.swift create mode 100644 JSONStudents/JSONStudents/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 JSONStudents/JSONStudents/Assets.xcassets/Contents.json create mode 100644 JSONStudents/JSONStudents/Base.lproj/LaunchScreen.storyboard create mode 100644 JSONStudents/JSONStudents/Base.lproj/Main.storyboard create mode 100644 JSONStudents/JSONStudents/Info.plist create mode 100644 JSONStudents/JSONStudents/Student.swift create mode 100644 JSONStudents/JSONStudents/StudentManager.swift create mode 100644 JSONStudents/JSONStudents/ViewController.swift diff --git a/JSONStudents/JSONStudents.xcodeproj/project.pbxproj b/JSONStudents/JSONStudents.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ff6d48c --- /dev/null +++ b/JSONStudents/JSONStudents.xcodeproj/project.pbxproj @@ -0,0 +1,349 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 4B0ADF14216FDA6D009C7DBA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */; }; + 4B0ADF16216FDA6D009C7DBA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */; }; + 4B0ADF19216FDA6D009C7DBA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF17216FDA6D009C7DBA /* Main.storyboard */; }; + 4B0ADF1B216FDA6F009C7DBA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF1A216FDA6F009C7DBA /* Assets.xcassets */; }; + 4B0ADF1E216FDA6F009C7DBA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF1C216FDA6F009C7DBA /* LaunchScreen.storyboard */; }; + 4B0ADF26216FDAB3009C7DBA /* Student.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF25216FDAB3009C7DBA /* Student.swift */; }; + 4B0ADF28216FDAFF009C7DBA /* StudentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF27216FDAFF009C7DBA /* StudentManager.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 4B0ADF10216FDA6D009C7DBA /* JSONStudents.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JSONStudents.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 4B0ADF18216FDA6D009C7DBA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 4B0ADF1A216FDA6F009C7DBA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4B0ADF1D216FDA6F009C7DBA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 4B0ADF1F216FDA6F009C7DBA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4B0ADF25216FDAB3009C7DBA /* Student.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Student.swift; sourceTree = ""; }; + 4B0ADF27216FDAFF009C7DBA /* StudentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentManager.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4B0ADF0D216FDA6D009C7DBA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 4B0ADF07216FDA6D009C7DBA = { + isa = PBXGroup; + children = ( + 4B0ADF12216FDA6D009C7DBA /* JSONStudents */, + 4B0ADF11216FDA6D009C7DBA /* Products */, + ); + sourceTree = ""; + }; + 4B0ADF11216FDA6D009C7DBA /* Products */ = { + isa = PBXGroup; + children = ( + 4B0ADF10216FDA6D009C7DBA /* JSONStudents.app */, + ); + name = Products; + sourceTree = ""; + }; + 4B0ADF12216FDA6D009C7DBA /* JSONStudents */ = { + isa = PBXGroup; + children = ( + 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */, + 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */, + 4B0ADF17216FDA6D009C7DBA /* Main.storyboard */, + 4B0ADF25216FDAB3009C7DBA /* Student.swift */, + 4B0ADF27216FDAFF009C7DBA /* StudentManager.swift */, + 4B0ADF1A216FDA6F009C7DBA /* Assets.xcassets */, + 4B0ADF1C216FDA6F009C7DBA /* LaunchScreen.storyboard */, + 4B0ADF1F216FDA6F009C7DBA /* Info.plist */, + ); + path = JSONStudents; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4B0ADF0F216FDA6D009C7DBA /* JSONStudents */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4B0ADF22216FDA6F009C7DBA /* Build configuration list for PBXNativeTarget "JSONStudents" */; + buildPhases = ( + 4B0ADF0C216FDA6D009C7DBA /* Sources */, + 4B0ADF0D216FDA6D009C7DBA /* Frameworks */, + 4B0ADF0E216FDA6D009C7DBA /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = JSONStudents; + productName = JSONStudents; + productReference = 4B0ADF10216FDA6D009C7DBA /* JSONStudents.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4B0ADF08216FDA6D009C7DBA /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1000; + LastUpgradeCheck = 1000; + ORGANIZATIONNAME = "Paul Yi"; + TargetAttributes = { + 4B0ADF0F216FDA6D009C7DBA = { + CreatedOnToolsVersion = 10.0; + }; + }; + }; + buildConfigurationList = 4B0ADF0B216FDA6D009C7DBA /* Build configuration list for PBXProject "JSONStudents" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 4B0ADF07216FDA6D009C7DBA; + productRefGroup = 4B0ADF11216FDA6D009C7DBA /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4B0ADF0F216FDA6D009C7DBA /* JSONStudents */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4B0ADF0E216FDA6D009C7DBA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B0ADF1E216FDA6F009C7DBA /* LaunchScreen.storyboard in Resources */, + 4B0ADF1B216FDA6F009C7DBA /* Assets.xcassets in Resources */, + 4B0ADF19216FDA6D009C7DBA /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4B0ADF0C216FDA6D009C7DBA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B0ADF16216FDA6D009C7DBA /* ViewController.swift in Sources */, + 4B0ADF28216FDAFF009C7DBA /* StudentManager.swift in Sources */, + 4B0ADF26216FDAB3009C7DBA /* Student.swift in Sources */, + 4B0ADF14216FDA6D009C7DBA /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 4B0ADF17216FDA6D009C7DBA /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4B0ADF18216FDA6D009C7DBA /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 4B0ADF1C216FDA6F009C7DBA /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4B0ADF1D216FDA6F009C7DBA /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4B0ADF20216FDA6F009C7DBA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 4B0ADF21216FDA6F009C7DBA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4B0ADF23216FDA6F009C7DBA /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 6Z7SV6KDUH; + INFOPLIST_FILE = JSONStudents/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.paulyi.JSONStudents; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 4B0ADF24216FDA6F009C7DBA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 6Z7SV6KDUH; + INFOPLIST_FILE = JSONStudents/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.paulyi.JSONStudents; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4B0ADF0B216FDA6D009C7DBA /* Build configuration list for PBXProject "JSONStudents" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B0ADF20216FDA6F009C7DBA /* Debug */, + 4B0ADF21216FDA6F009C7DBA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4B0ADF22216FDA6F009C7DBA /* Build configuration list for PBXNativeTarget "JSONStudents" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4B0ADF23216FDA6F009C7DBA /* Debug */, + 4B0ADF24216FDA6F009C7DBA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4B0ADF08216FDA6D009C7DBA /* Project object */; +} diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..8e5e72d --- /dev/null +++ b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..43dcfdafa46ebc728bb649e86a4bb6aa237b7f2d GIT binary patch literal 12033 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 M9|+Ir-;|X92Vh9@~ literal 0 HcmV?d00001 diff --git a/JSONStudents/JSONStudents.xcodeproj/xcuserdata/paulyi.xcuserdatad/xcschemes/xcschememanagement.plist b/JSONStudents/JSONStudents.xcodeproj/xcuserdata/paulyi.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..a3ecab7 --- /dev/null +++ b/JSONStudents/JSONStudents.xcodeproj/xcuserdata/paulyi.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + JSONStudents.xcscheme + + orderHint + 0 + + + + diff --git a/JSONStudents/JSONStudents/AppDelegate.swift b/JSONStudents/JSONStudents/AppDelegate.swift new file mode 100644 index 0000000..49ddf6e --- /dev/null +++ b/JSONStudents/JSONStudents/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// JSONStudents +// +// Created by Paul Yi on 10/11/18. +// Copyright © 2018 Paul Yi. All rights reserved. +// + +import UIKit + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/JSONStudents/JSONStudents/Assets.xcassets/AppIcon.appiconset/Contents.json b/JSONStudents/JSONStudents/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/JSONStudents/JSONStudents/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JSONStudents/JSONStudents/Assets.xcassets/Contents.json b/JSONStudents/JSONStudents/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/JSONStudents/JSONStudents/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JSONStudents/JSONStudents/Base.lproj/LaunchScreen.storyboard b/JSONStudents/JSONStudents/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/JSONStudents/JSONStudents/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JSONStudents/JSONStudents/Base.lproj/Main.storyboard b/JSONStudents/JSONStudents/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f1bcf38 --- /dev/null +++ b/JSONStudents/JSONStudents/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JSONStudents/JSONStudents/Info.plist b/JSONStudents/JSONStudents/Info.plist new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ b/JSONStudents/JSONStudents/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/JSONStudents/JSONStudents/Student.swift b/JSONStudents/JSONStudents/Student.swift new file mode 100644 index 0000000..096d9a9 --- /dev/null +++ b/JSONStudents/JSONStudents/Student.swift @@ -0,0 +1,9 @@ +import UIKit + +struct Student: CustomStringConvertible, Codable { + var description: String + + let name: String + let age: Int? + let cohort: String? +} diff --git a/JSONStudents/JSONStudents/StudentManager.swift b/JSONStudents/JSONStudents/StudentManager.swift new file mode 100644 index 0000000..f01bbcb --- /dev/null +++ b/JSONStudents/JSONStudents/StudentManager.swift @@ -0,0 +1,16 @@ +import UIKit + +class StudentManager: NSObject { + + var students: [Student] = [] + + let url = URL(fileURLWithPath: NSHomeDirectory()) + .appendingPathComponent("Documents") + .appendingPathComponent("students.json") + + func writeToFile() { + } + + func readFromFile() { + } +} diff --git a/JSONStudents/JSONStudents/ViewController.swift b/JSONStudents/JSONStudents/ViewController.swift new file mode 100644 index 0000000..12b2ee9 --- /dev/null +++ b/JSONStudents/JSONStudents/ViewController.swift @@ -0,0 +1,20 @@ +// +// ViewController.swift +// JSONStudents +// +// Created by Paul Yi on 10/11/18. +// Copyright © 2018 Paul Yi. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + +} + From 3aa3a36e7f8dd001797971bb50c7572c5a5dc878 Mon Sep 17 00:00:00 2001 From: Paul Yi Date: Thu, 11 Oct 2018 14:54:28 -0700 Subject: [PATCH 2/5] Implement writeToFile and readToFile methods for StudentManager --- .../UserInterfaceState.xcuserstate | Bin 12033 -> 13936 bytes JSONStudents/JSONStudents/Student.swift | 4 ++- .../JSONStudents/StudentManager.swift | 25 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate index 43dcfdafa46ebc728bb649e86a4bb6aa237b7f2d..e4b319dcd520dc36c92a2531883fd4c002c84016 100644 GIT binary patch delta 8681 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 delta 7017 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 Date: Thu, 11 Oct 2018 15:52:11 -0700 Subject: [PATCH 3/5] Create StudentsViewController and connect all outlets and buttons --- .../JSONStudents.xcodeproj/project.pbxproj | 8 +- .../UserInterfaceState.xcuserstate | Bin 13936 -> 17349 bytes .../JSONStudents/Base.lproj/Main.storyboard | 111 +++++++++++++++++- JSONStudents/JSONStudents/Student.swift | 3 +- .../JSONStudents/StudentsViewController.swift | 30 +++++ .../JSONStudents/ViewController.swift | 20 ---- 6 files changed, 141 insertions(+), 31 deletions(-) create mode 100644 JSONStudents/JSONStudents/StudentsViewController.swift delete mode 100644 JSONStudents/JSONStudents/ViewController.swift diff --git a/JSONStudents/JSONStudents.xcodeproj/project.pbxproj b/JSONStudents/JSONStudents.xcodeproj/project.pbxproj index ff6d48c..3fdd196 100644 --- a/JSONStudents/JSONStudents.xcodeproj/project.pbxproj +++ b/JSONStudents/JSONStudents.xcodeproj/project.pbxproj @@ -8,7 +8,7 @@ /* Begin PBXBuildFile section */ 4B0ADF14216FDA6D009C7DBA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */; }; - 4B0ADF16216FDA6D009C7DBA /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */; }; + 4B0ADF16216FDA6D009C7DBA /* StudentsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0ADF15216FDA6D009C7DBA /* StudentsViewController.swift */; }; 4B0ADF19216FDA6D009C7DBA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF17216FDA6D009C7DBA /* Main.storyboard */; }; 4B0ADF1B216FDA6F009C7DBA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF1A216FDA6F009C7DBA /* Assets.xcassets */; }; 4B0ADF1E216FDA6F009C7DBA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4B0ADF1C216FDA6F009C7DBA /* LaunchScreen.storyboard */; }; @@ -19,7 +19,7 @@ /* Begin PBXFileReference section */ 4B0ADF10216FDA6D009C7DBA /* JSONStudents.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JSONStudents.app; sourceTree = BUILT_PRODUCTS_DIR; }; 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 4B0ADF15216FDA6D009C7DBA /* StudentsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentsViewController.swift; sourceTree = ""; }; 4B0ADF18216FDA6D009C7DBA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 4B0ADF1A216FDA6F009C7DBA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 4B0ADF1D216FDA6F009C7DBA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; @@ -59,7 +59,7 @@ isa = PBXGroup; children = ( 4B0ADF13216FDA6D009C7DBA /* AppDelegate.swift */, - 4B0ADF15216FDA6D009C7DBA /* ViewController.swift */, + 4B0ADF15216FDA6D009C7DBA /* StudentsViewController.swift */, 4B0ADF17216FDA6D009C7DBA /* Main.storyboard */, 4B0ADF25216FDAB3009C7DBA /* Student.swift */, 4B0ADF27216FDAFF009C7DBA /* StudentManager.swift */, @@ -141,7 +141,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B0ADF16216FDA6D009C7DBA /* ViewController.swift in Sources */, + 4B0ADF16216FDA6D009C7DBA /* StudentsViewController.swift in Sources */, 4B0ADF28216FDAFF009C7DBA /* StudentManager.swift in Sources */, 4B0ADF26216FDAB3009C7DBA /* Student.swift in Sources */, 4B0ADF14216FDA6D009C7DBA /* AppDelegate.swift in Sources */, diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate index e4b319dcd520dc36c92a2531883fd4c002c84016..0afa18ff9bc1d46bce8b0eee2d9ff70e8feb7056 100644 GIT binary patch delta 9848 zcmb7p2Ygdi`~N-THc6Y=j3z1BX(>&bW;bQ;O&MjcQrb`orNs_b!JLaIn}Sh!ML=3A z;ChuMq99w5p+aRS-~yE4M3#d1KeuUdz3=b;`!%2BrZ?v~=leY88Q=5VA4?9+2g}u% zeU4on{ZZc%DZsNUy6lX2fe-jWYtROC0)0SV&=2H*{$KT?ZPlIQ`I#3Jhz;!Ltx4|y38@vPdfW2TJI1WAlAA*m-32+LW z24}%1;B)W=_!9gCZh)V`O>hg`26rOhF8BpJ0KY>7F_c0X)W8bdFa@@P8PEm& zFaWb*JJ=p}fE{6X*bDZ9IdCW(28Y9OFdt5aWsrk&;WAhQm%|nCN%#z01J}Y0a3kCV zUxu6E8*mrg4c~zW;UV}gd=DOl$KY}J0XzvKr{Nj+CAWDg_Zm1XPjfSFOXgC^yMxqI*2u(!AXcC%&Do`bw zg(7GnT7;fLPorni^Qa#E8@+~JM{l9G(JpileSkiWpmXSR^aZ+vuApzxcjzZ{8~utN zV2I;zJT_tzHe(C6VjH&O6r76P*n`{QPPjAfj(gxfxGx@#N8pio6dsMo;UYW{PsNYm za{MTcV1hY37e9fQ;$`?5yb}Kl*W(xP2D}k(!mr@1_-(ukM-Jon@ezC!AHyHvGx#k2 z1b>OY!WZ#X{2l%t|BCP7`}jBffW@qcRkA8p&6-#=3v)B;Zj_t(u zU~}1F>~MB0o5zl0E7>Y`8athx!Omo7vDNHsb`JX}8(|5{v5&Kh*&6oAA@=A6*amSR zEvl!s;y~)w=a2xzYpbihPIHDg%NKnacT?Dz4n$2fB#De5W9fDBR=~c4kfovVsV z3d7}niYw{8imBlOI!BlM%5V{#%GIkdTv}ONIWtcl{J)5Gs;n$89$!@%u4rIHj53}{ z00EH2q}GBU$*Tn+GA_D6(jvPpFs}#gKzq=EJopbO{ju zfE2E0e2g9RB66y8IC??SY2W}b_#b1k=$K(dMaL8ohpppcGsFKi&pHa^{apf#qY~pu zF_oAUEt95>ECS_B>PuiECe^KmlzAE z1XYZk$!4;_OfU;ngW1GMrjZ?VMm2ri$tqx+E8 zBV1ZsRS`{;Etf3>i+K|*BGYTZ5;7yYS>|oG96ZV2TR~>lf+(3q(g*V!-K@|`@Eotu zzreF#6{#k($(;3IH3hPkJW7||9yQAg2iAiPwcrI3AvMiXo51T#>PGM)cnQ1=UIDLy ze}mTuAsm@Y9wYO}ckHF`?^ziLu*{8H@dTIZv z%97&JFr6eSP1gj$SKum>x&d4Sm%wH4HTVWxAy1QM$V&1r@+?`k0bB#u!MET$@I7N8 z&ym$+4SAldix#FYjMzGyx;A{ReXAx<-m*I24!VL_0iVy~@q2wCpU3Ak2Lf5HtdKj~ z<8^2Iygs*gPE6xp!G=1}0Pa(r*HWzuM|RE#4$0^f$ZApmG7vDS>(-HUTZfMty_-1& zSs2G8Kmim&5sZfkP#kSY94vT+tS7ILx~NN;J%*-&4fRj~6QL5SNIls|UL-G3mw-u7 zOGR}|HcTEFi}ne{;qoE9N(;j?$P3hqHsr}Qe@iarw9fez;Z}|N0FBTTJ+3sNI%tj_ zRazsl8JW${29t@OY$6+)7GXGk5z>mEvw7Y0##=A*w?_BQ?VpodS;c3ZiUycTQMsW9 zdYSX13d;(rrqJ6%2K60LSv)0NQJFtwDtVRsn=pCu@e_(m!mTqiGlx`!%PTUY|F*P_ z!d7}w3|$arMf1}%Y#j_S%lL0i_glj@(QB#<)Rx}8rgB(^H?RC(wTE zJnRZR(G}{X$Tsq7Y@r^o=a8ISim(p$V3sxRCG1VT7xp1(m!wG-S6R?PyzL@N$rvH>U zVt7k{xfV_#?>x-Ia4MYfKc^eB$L_bX@FJV~a(_!?X{dhjmP19b5-%$@}C;9b6CM$Wbyp zx+<|n1ilD1tRppl4xv}zt1y9X@$2LiIZgwJAs@$<+d@MVZiU;(2js-VYzlY4oiw4q zH_3;!a5mMN*SIu)T5(bS_>yq1%J7uD()=mmJh}O=smWC_y?8=p#GLl95VvZ!${x6n zpK&iaSqt}*29iFqxUmfLfte>yYbwNDyYVGERz4oq>n>$gd|jWKUtU?EjQk$^YYwKv z&7esSZ-J(}4svaFm@=J@V@{7XlVhiUs zZetfJ*th8i9z?jDx?5o`uhTh2F|y{F}67)_YId8 zRZdhu?oR=PEXc~&AR3c5$@dYy1QB(k`B6)-VLeJitx!7of&4^n{84~@2641D{78oL z^+xrdLgl|#5fr4`l1zT4O8>Kp$Y>csZTK=mZt(>py2g?x8~fJNU;lqO9Q8p1nACdI7xhCqs6V++ej^Xa@AYUP8U*6dU=A=G%{#+6ASCI- z`-Ue}@)$-8DlVGX_$}(tq&v_kG>)HSG#Z1(qC5`J!zSbaJq+M_#zHr@fU#3{spbG1 zt=14dn%tPZn)j;|O{Iwgm2p52RV7&?s0vNz$qrAt(F_iVNP0}EYGAHIv(X$5#B)IW zFx?}9=KY-@qrQwC&8O;UIFP_|>gtY-PSU*QVpQ`Fk$zO&!Iv!^&s^fry1FAo8zJOl*$D%LMMPK1SBEP7TI7am9n%%^+ zZ5@lp{RQ)8wEZ9AZ!i}0CI{5S$pK9?Uu%@3-RK>(he<$tne%8rIuNbV_O^1sO6W#v zIgoN19YXKYpWj1=(ff4BUUUqkpyScI+Wrwbj01KK=>8lRAEJ+9alru#2lRgqj8lA2 zogXQ2Pg!tuw%#Vrp=F~E{l>HQ z#v9QRy$GYB2Rb(5B&76?W031W#Br|PW-{aHHJ^Sfj6Rm!EuvHnwHK7+S5yq2UR+vOHoaF@nvJGXUP)J` z1oRJrOhgJ1Cc>e4Ik~O9<@rzHpzwrn zdAPJ7T&GJOo|D^u{3LqrZZNbm%1jm;uk_^b%!-lpTGseWMXi}6)LMy*C>v5zWi8WM zMQ<`$HP!=-)mXO>k})@39&xIHqj&mVoZMF)kPC`e+S z{7>D4D=pF-N!n00l^fQmY?E9lnX1#K?dY7`uEhmB?aVKqS=S~x+QwivcI?!-OV@7Q zd-UwpyHDSKIsFF=9F#jacj&O;BSwxIJtjKG@KHoSFo~DT2uoCQM$u{uBV-hep0P0* zjF-t``ZGhADrPqG8gr02#9Ux5G1r-!AOT2#93%oAFoIUV3v$6wkViXirSwc)4d&3k z8%KL?i@*!Cv$l(N)%Mb}*w5fDJ@UlULrn(k4+m1xJcRPq$O5<&uBM!?p7y%7!2|FV zyp1qzVwsTx`Dnwc3vE)3r~Cz-wdsORbD(9Tk7EHAj>*aGS5+C|X}J)?6hGWEk^io3;r&B~J(HvKASRq@yI8>7O1p0amLD4Q1RK6E}o zbd^dHXvW$P)5B6d&cXfh06dTb6k1yjwBtbgdYsEsAUu?#9VN!^Vi3H(%ns1>E7w~Vgi36QtA2o7m^D4!-q>=mJ$>e7cx*X5wx@V({r`bYzNuN}S-h5qwhBLoS7TaZso@53AeZ{n z;ClRgBQ#oOhs2-_fW@xYe7qc}lvJLNu0egc7HvA8xMITtTF1#D> z=P|s4_u##F9|uNqU=#;Nb6`w8KF|o^T@H+mK^Pyi&T$^X2OP+2hH!#Hz$bA7|K`9r z4&=u^NsU}97d8X=6kmt|InM(r;DLP3Td43K7E<8L%|e&(*OZ0e%N&?ci@)K(M56tR zqkkLo%A!2^K5(g%8prjt(!ng4q zOe1Rw2dX$QjRTMJVVf3Rk*bU)r>-A_e`jfDC&t!T$br%(7R0iY1+j6gfCH4-l|N)b zY&ljfHE};dA)&dU9@V(8$vTptRu|!WcyLm{-b-y=CJ+w?jZ;0LUSAYhcS-J4yO9VT8ICwLzwoTTZHTg zb`+CX%Tn*0SIbiGd_3CSVb5jr*-1>|CU!hqz!tJ$b^=?(PGsp0&*#7b4lLxrA`UF( zz!DBD<-oE{>}1*%wy>pa89SAIgrSzLp)FyW-j{P=1qYtwKy>SFhYm#8x%5!VNC^C6 zXP;mfP&4rNYFRq*GtHi`^p6aYydm>6b>Ueh%b|^jcJ@vJ{h7O z&7WUnIk|npGsA_Q$_pkIPYaiyVArr~qXRND{7Io2EkMiBbF?OIL@(01_&VBxwxb>B zGjxkSfl**3R?|wPqgBX2pTxN6(-$wT7Fo19w4qO7I?#MvgWtp#S(ZK!X-gk{6tWfc zp~rOkz@wTz?1-=&yPSQJeTsdC{TI86UCpj#*ReaN_~#pTBp#FfOA#!ZbYkE@KE7WZu2j<}<7*W>OASb;zw5+n#D0+~P|Fbd29tH3Tu z6{HE$1x`U1L6P7Y!FItx!D+!o!PkN-g6o3s1V0FYP%2ail|qeBE7S{H3jM-tVH;sP zVP|1iVfTozr?8iBs4!1BNmwCVC|oXFBitZ-O}I_CUASL(Ncf)ci13*31K~O0dEo`& z=fc|}B#ILWMF}E_NG56_GKnlAyC_wZCJKl`qSm5zq7I@?q8!mcQLbpHXt-#ks6;eV z^r(o4=8EQv7K#>&mWo~!?GPOl9T$BlIw6WQh)#(<6MZ52N_0u|wdhJbh&RVO<2%K7 ziJurhCH{%{*HUGe=B}h{5$b`;`hZLh(8p6I{y0vkU-gQf;2&%keJ|3=$gMo7j>CQ7DA=1G=H zmPwXNo|SBpye8Qp*(rHf^1kG#xKOd~VNoHCy*Aj^_v z%R0(B%eu@C?Y**mhmvi-7y zvUg>NWk+PkWM9fI$}Y>kkzJKtmwhMuL3TrSOLkZGt6U;amA8}kk&lnar^p|ZZ;-zw zKO{dXKP5jS|5Scn{+S|9p;TxTT1B$LpfD-y3XdYBXsu|gXs_s|=%MJP=%eVTn5kHy zcu}!Mv0br4u~YG`;*{cy;uFO=#RbLZiZ2xx6*m+&6}J_46~8L(D;^{=i7-)?n4B0) z?439vabDu`#NCNU5+e8{qR?VyeH(B^7~XoqP>Xvb?OYNu$YX=iGywR5yjX=}9`w41aqXr_yP3^f0Dtp-a)F>C$yhUAC^LuD7nQ zE=M;&H%K>FH&hqa73qp~lXX*cWx7Xn6}qa3Zjo-KZk?`9SFhWk+oap9+p62H+o9X3 zds}x__dsvechdLP_tW>+57dv;7wE(KB7L!bvVMwwn*K5U0{tTW68#E&RR6SorGAb6 z75#So8~Qi($MqlTPv{%;r}Ss^U+6FEztLaSU)SH&-_!q=%p}8PoUBW3o7^k8Z*n9j zd0=vG@{r_l$%~VpO0G>_pZr4d#umRAprM1IuOY`Uz%a-#$}rY2&M@9kZCGHaF|05| z4Nn_Z8`c`u8R`u6hF1-*8@3p>8TJ`IGMqGgY&dN=YxvY~-td{>JHro#pA0`6ZW-Pv&K)27meQ< zzc>D9ykWd)yluQ|{MCd^a+BJWWYU?8CbP+EvYULSpsA0kpQ*oTpeffh#5C3vHWitQ zO_NPiOtVb0O^=$0X{D*&w86B=^pa_ZX{YIJ({9rd(;3qzrgNqX=COvGEFnu9 zOM6QvOK(eGOO9orCD$^l|yu%2^+?F0wAMF0-z% zMy;!@FIr!+zHEKf`j&OKb&qww^^o;F>qpj8*0a`g)(h5a)}O3DTW?wKSRdGc4cX#s zLR+FO*_LL@w0UekTfo-V*1^`v*45VCHr$qPE4R(JMQUxkYs{$6Oz}PPjgH zopzmdU3Oh_ee3$cb<=g*^^5CXW_+e3Q=e(eOwDYS>7-8#Lz!(d+humh>>SDLnwg(D zKlA0xBbg1Er!zmvJePSX^SjI+GH+zw%)FENOXfYd&@FMx+==cax6a+dZFFb2Gu>_7 z-P}FhecUmBIL^$zup@{aM2^N#mE;;r;@-g(~n-bLP}-Wu;} z?^^FV?|SbYANEOna-Y(t@#%b4Uy3iy=kU3FZr>>1qKI#&?m`(V*fJ#a(~qSwEr3Z z^ZsrA-TuA)1O7w))BZ2~7yV!Rulm3B-wMEhAP^sr1QG-4KvF;#Fb7%&+6KA>!hw=N zWJ#bd@LJ&Yz~;c#z}~=tz@fn5z|p|*z^8$Wfy;q!0#^gq12+SA0>1|C2Ob2OpeQH~ zN`vxXRzk~rS=Y1fX5GvB zEyRRShz&_YijXp-4jDtHkR_BJ$_izN+JxGNI)=K0x`%p(Muzf2;aFP;!q}C4{;%Dl HP|^PbCKjP$ delta 6898 zcmaJ_2Ygdi+rMX|Sxs^?Z&F6~PD&}GlvQS-j55jwDTNj&lor~QRUzjJz6=F~3o->d z*eF{BWQn4J$OhSh2*~zj@9(6g_^IFTOMW*uIrlv0`9JggbH1Ad?&o}>$9OazGt=Y+ z?PfOL7LEgTK>}z5T7lLe1+)QeL08ZX^aB~7KNt@8FN{0Q?yqho|8= zcnSUnufrGcC42>6!#9XQVSpe)NP(0{g-oa#s*Y^Pj%uJdR1?LcS||ZEM#-oZN<&>x zSJVx4N4-&hGyr9y95f8&qOqt5y^qGB@#q6I19zf z`_Q-OJ9HQwK}XRsbPAnE7trtMT7PsM-9UHHpXdpCfnH(>mSP!}<7lkFTCBr*?8GkY z#vbg&KJ3Q<9EWS-I=C)wh#TR?xHC?}U2s?24R^;qa8KL|_r`tjd$=!7#{+OS9)^bt zg{ToECxk6149T%g30MrITv1Vct$-ylPG~J^skSmnL{AKaBRxqU5+K=|7K?Tvy)G?O zn3&0ZAvBWZ+-38-r$yrW7QBCZH+lM>0tNQl=K;04)hi;S3P2 zDVug`2Ri<1P6C~iMs##e7V+Dg%v{PuUX>WSgWms?0DTxM=t~As;|2?(Rjv*Lz%a(O z3S@#TFc1s^gF!YJ0)~PdGK35zIb;~gC3$2x8A0+_QOP{U!6Y(?pa6tGAs9(lDWJOb z^u3CFO?Hy+gr}-lp%MFu>H{z_V*dmZDh3~tLg73c-)IW>C^9ycj4TEplTpOirF}+r zZYA1J!0ZUxnP3(W$Y?T#j4cIosIIxBh_1gvXsgcb^ch%E3>K63$@EI8Vz7#FtpFvU z6qJEwU^!R;R+4dKJP8v*c=7?6umY?GYrtCYIkN$*1MA5|@*(+@l#<${j4Yd_nI*ib zR>cQ)fIW<+415iCf?Z%Y`45>yCX*>;U@!Ov>;vDDsbmKEgv=y*PRBNzFYOe?>pvqn~OjG4kr1rG2_32-pe?Me5`L&UJ4(t`8g5~C>r z7r;d_iwGs)S8$okCUc0t>%hF6%!0m|c>@ZE(d=uNl{+XjxLjQ|a1AV3N~Wvv?KZEy$N1^2*x@TU-`?;>78=8+OISNKSu*bF=ZOG?3G@B}<1^T{Ie8Fe3c0bVk4 z>XO&sO|O(lc4rUF&dTqalAD<|n)+q|S;*pY><~gESPfQ$nd$Uy?o}zv)8M=zUK*T* zZ-=0)d}wiGs85@;4ykVor{FkLF>=U4HPkTYdskZ2wR5|kq3mH<1)+>#!^u)oESxj9 z7w!eb!iAthTA|zkIiV?ML`JH-DQ9>)8Uw2cMO+Y7rK3fhU)481DpYbazcnqsmL5i>Zho^wM}jA6ZGJr?dK^qPT!1 zZd|}pRI_G$y?`a5cH+2kZ^H#+Aua4OSOdnvnlPTMCTqxA@_8Ao4eNk?FoAqQHq%7; zlK6VG%NiK!mYp@KXXoregG0hoORNhvhRq|=Nw5iQ3Y(F2WIfqHHkL6~CJ`nx4q8xp zvPtMh&J%1G+XRV`s^uR;{;p^i(v^( zmQtE5%iwY$-`>VdekKgrPmZ2~E8!~oY&Bd1*V5;ua2+@c*9#Zz9l~_Z5%T^2DnPgq zZi*BjlSmGcA0p*P^c7+GiWVT;2Dif<*}Y!)m0Z-vwttF zNC^?aol4O83;X*vyPj zMh7)c?ms*yyC4)7cLG3!MNzfu%rv>}tVS%6%H+`sC0DJw+361i<7#zv9_Vw2EAu6gXr&kCYC8+MlspUKqe$Cb+ruY3=zdc zv&IzkqW8T1L$U^h3c5K4zkUEHh>zFTVYp;&Cw$@twZ@*$6ao<$LkYxo+MU5lth)z{zW4)Js!Ws8e4

3Fi#QF^yHfo&Iq-nF} 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 - + + + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JSONStudents/JSONStudents/Student.swift b/JSONStudents/JSONStudents/Student.swift index 40cb9a6..23e67ef 100644 --- a/JSONStudents/JSONStudents/Student.swift +++ b/JSONStudents/JSONStudents/Student.swift @@ -1,9 +1,8 @@ import UIKit struct Student: CustomStringConvertible, Codable { + var description: String - var description: String { - } let name: String let age: Int? diff --git a/JSONStudents/JSONStudents/StudentsViewController.swift b/JSONStudents/JSONStudents/StudentsViewController.swift new file mode 100644 index 0000000..0360793 --- /dev/null +++ b/JSONStudents/JSONStudents/StudentsViewController.swift @@ -0,0 +1,30 @@ +import UIKit + +class StudentsViewController: UIViewController { + + var studentManager = StudentManager() + + @IBOutlet weak var nameTextField: UITextField! + @IBOutlet weak var ageTextField: UITextField! + @IBOutlet weak var cohortTextField: UITextField! + + @IBAction func saveButton(_ sender: Any) { + + } + + @IBAction func printButton(_ sender: Any) { + } + + + override func viewWillAppear(_ animated: Bool) { + studentManager.readFromFile() + } + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + +} + diff --git a/JSONStudents/JSONStudents/ViewController.swift b/JSONStudents/JSONStudents/ViewController.swift deleted file mode 100644 index 12b2ee9..0000000 --- a/JSONStudents/JSONStudents/ViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// ViewController.swift -// JSONStudents -// -// Created by Paul Yi on 10/11/18. -// Copyright © 2018 Paul Yi. All rights reserved. -// - -import UIKit - -class ViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view, typically from a nib. - } - - -} - From e7156f03b222dde6d876ec9eaafaad3a016043cd Mon Sep 17 00:00:00 2001 From: Paul Yi Date: Thu, 11 Oct 2018 17:06:06 -0700 Subject: [PATCH 4/5] Add save and print function to StudentsViewController --- .../UserInterfaceState.xcuserstate | Bin 17349 -> 27591 bytes JSONStudents/JSONStudents/Student.swift | 1 - .../JSONStudents/StudentManager.swift | 7 +++++-- .../JSONStudents/StudentsViewController.swift | 11 ++++++++--- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate index 0afa18ff9bc1d46bce8b0eee2d9ff70e8feb7056..d166eb20bc917a15dbd95ff69725e02ec6cec745 100644 GIT binary patch literal 27591 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 diff --git a/JSONStudents/JSONStudents/Student.swift b/JSONStudents/JSONStudents/Student.swift index 23e67ef..096d9a9 100644 --- a/JSONStudents/JSONStudents/Student.swift +++ b/JSONStudents/JSONStudents/Student.swift @@ -3,7 +3,6 @@ import UIKit struct Student: CustomStringConvertible, Codable { var description: String - let name: String let age: Int? let cohort: String? diff --git a/JSONStudents/JSONStudents/StudentManager.swift b/JSONStudents/JSONStudents/StudentManager.swift index 0199317..acc5f1a 100644 --- a/JSONStudents/JSONStudents/StudentManager.swift +++ b/JSONStudents/JSONStudents/StudentManager.swift @@ -22,7 +22,6 @@ class StudentManager: NSObject { func readFromFile() { // get data, decode it, and write an error statement with the catch block - do { let studentData = try Data(contentsOf: url) let decoder = JSONDecoder() @@ -31,11 +30,15 @@ class StudentManager: NSObject { } catch { print("Data could not be retrieved: \(error)") } - // decoding outside information to parse // let jsonData = jsonString.data(encoding: .utf8)! // let decoder = JSONDecoder() // let student = try! decoder.decode(Student.self, for: jsonData) } + + func createStudent(name: String, age: Int?, cohort: String?) { + let student = Student.init(name: name, age: age, cohort: cohort) + students.append(student) + } } diff --git a/JSONStudents/JSONStudents/StudentsViewController.swift b/JSONStudents/JSONStudents/StudentsViewController.swift index 0360793..334f6cf 100644 --- a/JSONStudents/JSONStudents/StudentsViewController.swift +++ b/JSONStudents/JSONStudents/StudentsViewController.swift @@ -3,20 +3,25 @@ import UIKit class StudentsViewController: UIViewController { var studentManager = StudentManager() - + @IBOutlet weak var nameTextField: UITextField! @IBOutlet weak var ageTextField: UITextField! @IBOutlet weak var cohortTextField: UITextField! @IBAction func saveButton(_ sender: Any) { - + guard let name = nameTextField.text else { return } + guard let age = ageTextField.text else { return } + guard let cohort = cohortTextField.text else { return } + studentManager.createStudent(name: name, age: Int(age), cohort: cohort) + studentManager.writeToFile() } @IBAction func printButton(_ sender: Any) { + print(studentManager.students) } - override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) studentManager.readFromFile() } From a0b7dcc7eb09fe711080d670cd9f22068c24f45a Mon Sep 17 00:00:00 2001 From: Paul Yi Date: Fri, 12 Oct 2018 16:23:01 -0700 Subject: [PATCH 5/5] Create description to print out values for student --- .../UserInterfaceState.xcuserstate | Bin 27591 -> 29102 bytes JSONStudents/JSONStudents/Student.swift | 15 ++++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate b/JSONStudents/JSONStudents.xcodeproj/project.xcworkspace/xcuserdata/paulyi.xcuserdatad/UserInterfaceState.xcuserstate index d166eb20bc917a15dbd95ff69725e02ec6cec745..6e4a874644a3a9081c02630bf5c39f8e62c2d530 100644 GIT binary patch delta 13732 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 diff --git a/JSONStudents/JSONStudents/Student.swift b/JSONStudents/JSONStudents/Student.swift index 096d9a9..bdf5f90 100644 --- a/JSONStudents/JSONStudents/Student.swift +++ b/JSONStudents/JSONStudents/Student.swift @@ -1,9 +1,22 @@ import UIKit struct Student: CustomStringConvertible, Codable { - var description: String + var description: String { + var result = "\(name) " + if let cohort = cohort { + result += cohort.isEmpty ? "[unknown cohort]" : cohort + } else { + result += " [unknown cohort]" + } + if let age = age { + result += ", Age: \(age)" + } + return result + } let name: String let age: Int? let cohort: String? + + }