From 6bb44ac721394519123b953e697acc4e9c2d6fcf Mon Sep 17 00:00:00 2001 From: yzhukovs Date: Thu, 11 Oct 2018 17:26:13 -0400 Subject: [PATCH 1/2] first commit --- Student/Student.xcodeproj/project.pbxproj | 349 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 24968 bytes .../xcschemes/xcschememanagement.plist | 14 + Student/Student/AppDelegate.swift | 46 +++ .../AppIcon.appiconset/Contents.json | 98 +++++ Student/Student/Assets.xcassets/Contents.json | 6 + .../Base.lproj/LaunchScreen.storyboard | 25 ++ Student/Student/Base.lproj/Main.storyboard | 94 +++++ Student/Student/Info.plist | 45 +++ Student/Student/Student.swift | 24 ++ Student/Student/StudentManager.swift | 53 +++ Student/Student/ViewController.swift | 62 ++++ 14 files changed, 831 insertions(+) create mode 100644 Student/Student.xcodeproj/project.pbxproj create mode 100644 Student/Student.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Student/Student.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Student/Student.xcodeproj/project.xcworkspace/xcuserdata/yzhukovs.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Student/Student.xcodeproj/xcuserdata/yzhukovs.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 Student/Student/AppDelegate.swift create mode 100644 Student/Student/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Student/Student/Assets.xcassets/Contents.json create mode 100644 Student/Student/Base.lproj/LaunchScreen.storyboard create mode 100644 Student/Student/Base.lproj/Main.storyboard create mode 100644 Student/Student/Info.plist create mode 100644 Student/Student/Student.swift create mode 100644 Student/Student/StudentManager.swift create mode 100644 Student/Student/ViewController.swift diff --git a/Student/Student.xcodeproj/project.pbxproj b/Student/Student.xcodeproj/project.pbxproj new file mode 100644 index 0000000..0a65c5b --- /dev/null +++ b/Student/Student.xcodeproj/project.pbxproj @@ -0,0 +1,349 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 44A40184216FDB4B000E7569 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A40183216FDB4B000E7569 /* AppDelegate.swift */; }; + 44A40186216FDB4B000E7569 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A40185216FDB4B000E7569 /* ViewController.swift */; }; + 44A40189216FDB4B000E7569 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 44A40187216FDB4B000E7569 /* Main.storyboard */; }; + 44A4018B216FDB4D000E7569 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 44A4018A216FDB4D000E7569 /* Assets.xcassets */; }; + 44A4018E216FDB4D000E7569 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 44A4018C216FDB4D000E7569 /* LaunchScreen.storyboard */; }; + 44A40196216FDB90000E7569 /* Student.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A40195216FDB90000E7569 /* Student.swift */; }; + 44A40198216FDC2E000E7569 /* StudentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A40197216FDC2E000E7569 /* StudentManager.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 44A40180216FDB4B000E7569 /* Student.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Student.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A40183216FDB4B000E7569 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 44A40185216FDB4B000E7569 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 44A40188216FDB4B000E7569 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 44A4018A216FDB4D000E7569 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 44A4018D216FDB4D000E7569 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 44A4018F216FDB4D000E7569 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 44A40195216FDB90000E7569 /* Student.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Student.swift; sourceTree = ""; }; + 44A40197216FDC2E000E7569 /* StudentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentManager.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 44A4017D216FDB4B000E7569 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 44A40177216FDB4B000E7569 = { + isa = PBXGroup; + children = ( + 44A40182216FDB4B000E7569 /* Student */, + 44A40181216FDB4B000E7569 /* Products */, + ); + sourceTree = ""; + }; + 44A40181216FDB4B000E7569 /* Products */ = { + isa = PBXGroup; + children = ( + 44A40180216FDB4B000E7569 /* Student.app */, + ); + name = Products; + sourceTree = ""; + }; + 44A40182216FDB4B000E7569 /* Student */ = { + isa = PBXGroup; + children = ( + 44A40183216FDB4B000E7569 /* AppDelegate.swift */, + 44A40185216FDB4B000E7569 /* ViewController.swift */, + 44A40187216FDB4B000E7569 /* Main.storyboard */, + 44A40195216FDB90000E7569 /* Student.swift */, + 44A40197216FDC2E000E7569 /* StudentManager.swift */, + 44A4018A216FDB4D000E7569 /* Assets.xcassets */, + 44A4018C216FDB4D000E7569 /* LaunchScreen.storyboard */, + 44A4018F216FDB4D000E7569 /* Info.plist */, + ); + path = Student; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 44A4017F216FDB4B000E7569 /* Student */ = { + isa = PBXNativeTarget; + buildConfigurationList = 44A40192216FDB4D000E7569 /* Build configuration list for PBXNativeTarget "Student" */; + buildPhases = ( + 44A4017C216FDB4B000E7569 /* Sources */, + 44A4017D216FDB4B000E7569 /* Frameworks */, + 44A4017E216FDB4B000E7569 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Student; + productName = Student; + productReference = 44A40180216FDB4B000E7569 /* Student.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 44A40178216FDB4B000E7569 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1000; + LastUpgradeCheck = 1000; + ORGANIZATIONNAME = "Yvette Zhukovsky"; + TargetAttributes = { + 44A4017F216FDB4B000E7569 = { + CreatedOnToolsVersion = 10.0; + }; + }; + }; + buildConfigurationList = 44A4017B216FDB4B000E7569 /* Build configuration list for PBXProject "Student" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 44A40177216FDB4B000E7569; + productRefGroup = 44A40181216FDB4B000E7569 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 44A4017F216FDB4B000E7569 /* Student */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 44A4017E216FDB4B000E7569 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44A4018E216FDB4D000E7569 /* LaunchScreen.storyboard in Resources */, + 44A4018B216FDB4D000E7569 /* Assets.xcassets in Resources */, + 44A40189216FDB4B000E7569 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 44A4017C216FDB4B000E7569 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 44A40186216FDB4B000E7569 /* ViewController.swift in Sources */, + 44A40198216FDC2E000E7569 /* StudentManager.swift in Sources */, + 44A40196216FDB90000E7569 /* Student.swift in Sources */, + 44A40184216FDB4B000E7569 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 44A40187216FDB4B000E7569 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 44A40188216FDB4B000E7569 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 44A4018C216FDB4D000E7569 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 44A4018D216FDB4D000E7569 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 44A40190216FDB4D000E7569 /* 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; + }; + 44A40191216FDB4D000E7569 /* 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; + }; + 44A40193216FDB4D000E7569 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NH6AR4LY3J; + INFOPLIST_FILE = Student/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = LambdaSchool.Student; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 44A40194216FDB4D000E7569 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = NH6AR4LY3J; + INFOPLIST_FILE = Student/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = LambdaSchool.Student; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 44A4017B216FDB4B000E7569 /* Build configuration list for PBXProject "Student" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 44A40190216FDB4D000E7569 /* Debug */, + 44A40191216FDB4D000E7569 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 44A40192216FDB4D000E7569 /* Build configuration list for PBXNativeTarget "Student" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 44A40193216FDB4D000E7569 /* Debug */, + 44A40194216FDB4D000E7569 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 44A40178216FDB4B000E7569 /* Project object */; +} diff --git a/Student/Student.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Student/Student.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d79fb0 --- /dev/null +++ b/Student/Student.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Student/Student.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Student/Student.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Student/Student.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Student/Student.xcodeproj/project.xcworkspace/xcuserdata/yzhukovs.xcuserdatad/UserInterfaceState.xcuserstate b/Student/Student.xcodeproj/project.xcworkspace/xcuserdata/yzhukovs.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..9f08bbd709ca8d7c7999280f7ae439a5a505a37b GIT binary patch literal 24968 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
-*6~M~RdtUUs>UrJshUbr-x4jrIcP|ewFE1aj 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 D-U1AT literal 0 HcmV?d00001 diff --git a/Student/Student.xcodeproj/xcuserdata/yzhukovs.xcuserdatad/xcschemes/xcschememanagement.plist b/Student/Student.xcodeproj/xcuserdata/yzhukovs.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..0470f97 --- /dev/null +++ b/Student/Student.xcodeproj/xcuserdata/yzhukovs.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Student.xcscheme + + orderHint + 0 + + + + diff --git a/Student/Student/AppDelegate.swift b/Student/Student/AppDelegate.swift new file mode 100644 index 0000000..c87bfec --- /dev/null +++ b/Student/Student/AppDelegate.swift @@ -0,0 +1,46 @@ +// +// AppDelegate.swift +// Student +// +// Created by Yvette Zhukovsky on 10/11/18. +// Copyright © 2018 Yvette Zhukovsky. 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/Student/Student/Assets.xcassets/AppIcon.appiconset/Contents.json b/Student/Student/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d8db8d6 --- /dev/null +++ b/Student/Student/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/Student/Student/Assets.xcassets/Contents.json b/Student/Student/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Student/Student/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Student/Student/Base.lproj/LaunchScreen.storyboard b/Student/Student/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..bfa3612 --- /dev/null +++ b/Student/Student/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Student/Student/Base.lproj/Main.storyboard b/Student/Student/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d63bc16 --- /dev/null +++ b/Student/Student/Base.lproj/Main.storyboard @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Student/Student/Info.plist b/Student/Student/Info.plist new file mode 100644 index 0000000..16be3b6 --- /dev/null +++ b/Student/Student/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/Student/Student/Student.swift b/Student/Student/Student.swift new file mode 100644 index 0000000..bd53bbc --- /dev/null +++ b/Student/Student/Student.swift @@ -0,0 +1,24 @@ +// +// Student.swift +// Student +// +// Created by Yvette Zhukovsky on 10/11/18. +// Copyright © 2018 Yvette Zhukovsky. All rights reserved. +// + +import Foundation + +struct Student: CustomStringConvertible, Codable { + var description: String { + return "\(name), \(String(describing: age)), \(String(describing: cohort))" + +} + + + let name: String + let age: Int? + let cohort: String? + + +} + diff --git a/Student/Student/StudentManager.swift b/Student/Student/StudentManager.swift new file mode 100644 index 0000000..befa313 --- /dev/null +++ b/Student/Student/StudentManager.swift @@ -0,0 +1,53 @@ +// +// StudentManager.swift +// Student +// +// Created by Yvette Zhukovsky on 10/11/18. +// Copyright © 2018 Yvette Zhukovsky. All rights reserved. +// + +import Foundation + +class StudentManager: NSObject { + + var students:[Student] = [] + + + let url = URL(fileURLWithPath: NSHomeDirectory()) + .appendingPathComponent("Documents") + .appendingPathComponent("students.json") + + func writeToFile() { + + do { + let json = try JSONEncoder().encode(students) + try json.write(to: url) + } + + + catch { + print ("ERROR:\(error)") + + } + } + func readFromFile() { + + do{ + let json = try Data(contentsOf: url) + students = try JSONDecoder().decode([Student].self, from: json) + + + + + } + + catch { + print ("ERROR:\(error)") + + } + + } + + + +} diff --git a/Student/Student/ViewController.swift b/Student/Student/ViewController.swift new file mode 100644 index 0000000..181425a --- /dev/null +++ b/Student/Student/ViewController.swift @@ -0,0 +1,62 @@ +// +// ViewController.swift +// Student +// +// Created by Yvette Zhukovsky on 10/11/18. +// Copyright © 2018 Yvette Zhukovsky. All rights reserved. +// + +import UIKit + +class ViewController: UIViewController { + + + let sm = 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} + + + sm.students.append(Student(name:name, age:Int(age), cohort:cohort)) + + + sm.writeToFile() + + nameTextField.text = "" + ageTextField.text = "" + cohortTextField.text = "" + + + } + + override func viewWillAppear(_ animated: Bool) { + sm.readFromFile() + + } + + + @IBAction func printAction(_ sender: Any) { + + for i in sm.students { + print(i) + } + } + + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view, typically from a nib. + } + + +} + From ce84d73cb6beb6802855bed1555ae0d3f9050825 Mon Sep 17 00:00:00 2001 From: yzhukovs Date: Thu, 11 Oct 2018 17:37:08 -0400 Subject: [PATCH 2/2] fixed optional --- .../UserInterfaceState.xcuserstate | Bin 24968 -> 24957 bytes Student/Student/Student.swift | 11 ++++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Student/Student.xcodeproj/project.xcworkspace/xcuserdata/yzhukovs.xcuserdatad/UserInterfaceState.xcuserstate b/Student/Student.xcodeproj/project.xcworkspace/xcuserdata/yzhukovs.xcuserdatad/UserInterfaceState.xcuserstate index 9f08bbd709ca8d7c7999280f7ae439a5a505a37b..3929bab50d2e89e5571a8d51fe6635ee5cad5754 100644 GIT binary patch delta 6154 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 delta 6032 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 Z>uRlIlZ%o!B=1Z9G5MI>wP!3i@jtwh!ubFI diff --git a/Student/Student/Student.swift b/Student/Student/Student.swift index bd53bbc..da6cd47 100644 --- a/Student/Student/Student.swift +++ b/Student/Student/Student.swift @@ -10,8 +10,17 @@ import Foundation struct Student: CustomStringConvertible, Codable { var description: String { - return "\(name), \(String(describing: age)), \(String(describing: cohort))" + var msg = name + + if let age = age { + msg = msg + ", aged " + String(age) + + } + if let cohort = cohort { + msg = msg + ", cohort " + String(cohort) + } + return msg }