From dae3ca44cf9b2606a6092ec332879e531aa3dabf Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 17:36:17 +0900 Subject: [PATCH 01/12] Chapter 1-1 --- .../BareBasic.xcodeproj/project.pbxproj | 181 +++++++++++------- .../contents.xcworkspacedata | 7 + .../BareBasic/BareBasic/AppDelegate.swift | 20 +- .../AppIcon.appiconset/Contents.json | 25 +++ .../Base.lproj/LaunchScreen.storyboard | 16 +- .../BareBasic/Base.lproj/Main.storyboard | 33 +--- Chapter1/BareBasic/BareBasic/Info.plist | 4 +- .../BareBasic/BareBasic/ViewController.swift | 4 +- 8 files changed, 167 insertions(+), 123 deletions(-) create mode 100644 Chapter1/BareBasic/BareBasic.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Chapter1/BareBasic/BareBasic.xcodeproj/project.pbxproj b/Chapter1/BareBasic/BareBasic.xcodeproj/project.pbxproj index 5e4919c..326b588 100644 --- a/Chapter1/BareBasic/BareBasic.xcodeproj/project.pbxproj +++ b/Chapter1/BareBasic/BareBasic.xcodeproj/project.pbxproj @@ -3,29 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C7582891BE0A4B600BE59B3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C7582881BE0A4B600BE59B3 /* AppDelegate.swift */; }; - 2C75828B1BE0A4B600BE59B3 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C75828A1BE0A4B600BE59B3 /* ViewController.swift */; }; - 2C75828E1BE0A4B600BE59B3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C75828C1BE0A4B600BE59B3 /* Main.storyboard */; }; - 2C7582901BE0A4B600BE59B3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C75828F1BE0A4B600BE59B3 /* Assets.xcassets */; }; - 2C7582931BE0A4B600BE59B3 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C7582911BE0A4B600BE59B3 /* LaunchScreen.storyboard */; }; + CD7710901FA71BEA00D0F5E7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD77108F1FA71BEA00D0F5E7 /* AppDelegate.swift */; }; + CD7710921FA71BEA00D0F5E7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7710911FA71BEA00D0F5E7 /* ViewController.swift */; }; + CD7710951FA71BEA00D0F5E7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD7710931FA71BEA00D0F5E7 /* Main.storyboard */; }; + CD7710971FA71BEA00D0F5E7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD7710961FA71BEA00D0F5E7 /* Assets.xcassets */; }; + CD77109A1FA71BEA00D0F5E7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD7710981FA71BEA00D0F5E7 /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 2C7582851BE0A4B600BE59B3 /* BareBasic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BareBasic.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C7582881BE0A4B600BE59B3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C75828A1BE0A4B600BE59B3 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2C75828D1BE0A4B600BE59B3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C75828F1BE0A4B600BE59B3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C7582921BE0A4B600BE59B3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C7582941BE0A4B600BE59B3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD77108C1FA71BEA00D0F5E7 /* BareBasic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BareBasic.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CD77108F1FA71BEA00D0F5E7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + CD7710911FA71BEA00D0F5E7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + CD7710941FA71BEA00D0F5E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CD7710961FA71BEA00D0F5E7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + CD7710991FA71BEA00D0F5E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + CD77109B1FA71BEA00D0F5E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C7582821BE0A4B600BE59B3 /* Frameworks */ = { + CD7710891FA71BEA00D0F5E7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -35,31 +35,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C75827C1BE0A4B600BE59B3 = { + CD7710831FA71BEA00D0F5E7 = { isa = PBXGroup; children = ( - 2C7582871BE0A4B600BE59B3 /* BareBasic */, - 2C7582861BE0A4B600BE59B3 /* Products */, + CD77108E1FA71BEA00D0F5E7 /* BareBasic */, + CD77108D1FA71BEA00D0F5E7 /* Products */, ); sourceTree = ""; }; - 2C7582861BE0A4B600BE59B3 /* Products */ = { + CD77108D1FA71BEA00D0F5E7 /* Products */ = { isa = PBXGroup; children = ( - 2C7582851BE0A4B600BE59B3 /* BareBasic.app */, + CD77108C1FA71BEA00D0F5E7 /* BareBasic.app */, ); name = Products; sourceTree = ""; }; - 2C7582871BE0A4B600BE59B3 /* BareBasic */ = { + CD77108E1FA71BEA00D0F5E7 /* BareBasic */ = { isa = PBXGroup; children = ( - 2C7582881BE0A4B600BE59B3 /* AppDelegate.swift */, - 2C75828A1BE0A4B600BE59B3 /* ViewController.swift */, - 2C75828C1BE0A4B600BE59B3 /* Main.storyboard */, - 2C75828F1BE0A4B600BE59B3 /* Assets.xcassets */, - 2C7582911BE0A4B600BE59B3 /* LaunchScreen.storyboard */, - 2C7582941BE0A4B600BE59B3 /* Info.plist */, + CD77108F1FA71BEA00D0F5E7 /* AppDelegate.swift */, + CD7710911FA71BEA00D0F5E7 /* ViewController.swift */, + CD7710931FA71BEA00D0F5E7 /* Main.storyboard */, + CD7710961FA71BEA00D0F5E7 /* Assets.xcassets */, + CD7710981FA71BEA00D0F5E7 /* LaunchScreen.storyboard */, + CD77109B1FA71BEA00D0F5E7 /* Info.plist */, ); path = BareBasic; sourceTree = ""; @@ -67,13 +67,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C7582841BE0A4B600BE59B3 /* BareBasic */ = { + CD77108B1FA71BEA00D0F5E7 /* BareBasic */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C7582971BE0A4B600BE59B3 /* Build configuration list for PBXNativeTarget "BareBasic" */; + buildConfigurationList = CD77109E1FA71BEA00D0F5E7 /* Build configuration list for PBXNativeTarget "BareBasic" */; buildPhases = ( - 2C7582811BE0A4B600BE59B3 /* Sources */, - 2C7582821BE0A4B600BE59B3 /* Frameworks */, - 2C7582831BE0A4B600BE59B3 /* Resources */, + CD7710881FA71BEA00D0F5E7 /* Sources */, + CD7710891FA71BEA00D0F5E7 /* Frameworks */, + CD77108A1FA71BEA00D0F5E7 /* Resources */, ); buildRules = ( ); @@ -81,79 +81,81 @@ ); name = BareBasic; productName = BareBasic; - productReference = 2C7582851BE0A4B600BE59B3 /* BareBasic.app */; + productReference = CD77108C1FA71BEA00D0F5E7 /* BareBasic.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C75827D1BE0A4B600BE59B3 /* Project object */ = { + CD7710841FA71BEA00D0F5E7 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = CodersHigh; TargetAttributes = { - 2C7582841BE0A4B600BE59B3 = { - CreatedOnToolsVersion = 7.0.1; + CD77108B1FA71BEA00D0F5E7 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 2C7582801BE0A4B600BE59B3 /* Build configuration list for PBXProject "BareBasic" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = CD7710871FA71BEA00D0F5E7 /* Build configuration list for PBXProject "BareBasic" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C75827C1BE0A4B600BE59B3; - productRefGroup = 2C7582861BE0A4B600BE59B3 /* Products */; + mainGroup = CD7710831FA71BEA00D0F5E7; + productRefGroup = CD77108D1FA71BEA00D0F5E7 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C7582841BE0A4B600BE59B3 /* BareBasic */, + CD77108B1FA71BEA00D0F5E7 /* BareBasic */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C7582831BE0A4B600BE59B3 /* Resources */ = { + CD77108A1FA71BEA00D0F5E7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C7582931BE0A4B600BE59B3 /* LaunchScreen.storyboard in Resources */, - 2C7582901BE0A4B600BE59B3 /* Assets.xcassets in Resources */, - 2C75828E1BE0A4B600BE59B3 /* Main.storyboard in Resources */, + CD77109A1FA71BEA00D0F5E7 /* LaunchScreen.storyboard in Resources */, + CD7710971FA71BEA00D0F5E7 /* Assets.xcassets in Resources */, + CD7710951FA71BEA00D0F5E7 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C7582811BE0A4B600BE59B3 /* Sources */ = { + CD7710881FA71BEA00D0F5E7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C75828B1BE0A4B600BE59B3 /* ViewController.swift in Sources */, - 2C7582891BE0A4B600BE59B3 /* AppDelegate.swift in Sources */, + CD7710921FA71BEA00D0F5E7 /* ViewController.swift in Sources */, + CD7710901FA71BEA00D0F5E7 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 2C75828C1BE0A4B600BE59B3 /* Main.storyboard */ = { + CD7710931FA71BEA00D0F5E7 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C75828D1BE0A4B600BE59B3 /* Base */, + CD7710941FA71BEA00D0F5E7 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C7582911BE0A4B600BE59B3 /* LaunchScreen.storyboard */ = { + CD7710981FA71BEA00D0F5E7 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C7582921BE0A4B600BE59B3 /* Base */, + CD7710991FA71BEA00D0F5E7 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -161,29 +163,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C7582951BE0A4B600BE59B3 /* Debug */ = { + CD77109C1FA71BEA00D0F5E7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -197,38 +211,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C7582961BE0A4B600BE59B3 /* Release */ = { + CD77109D1FA71BEA00D0F5E7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + 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; @@ -236,57 +262,64 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C7582981BE0A4B600BE59B3 /* Debug */ = { + CD77109F1FA71BEA00D0F5E7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BareBasic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.BareBasic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C7582991BE0A4B600BE59B3 /* Release */ = { + CD7710A01FA71BEA00D0F5E7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = BareBasic/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.BareBasic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C7582801BE0A4B600BE59B3 /* Build configuration list for PBXProject "BareBasic" */ = { + CD7710871FA71BEA00D0F5E7 /* Build configuration list for PBXProject "BareBasic" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C7582951BE0A4B600BE59B3 /* Debug */, - 2C7582961BE0A4B600BE59B3 /* Release */, + CD77109C1FA71BEA00D0F5E7 /* Debug */, + CD77109D1FA71BEA00D0F5E7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C7582971BE0A4B600BE59B3 /* Build configuration list for PBXNativeTarget "BareBasic" */ = { + CD77109E1FA71BEA00D0F5E7 /* Build configuration list for PBXNativeTarget "BareBasic" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C7582981BE0A4B600BE59B3 /* Debug */, - 2C7582991BE0A4B600BE59B3 /* Release */, + CD77109F1FA71BEA00D0F5E7 /* Debug */, + CD7710A01FA71BEA00D0F5E7 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C75827D1BE0A4B600BE59B3 /* Project object */; + rootObject = CD7710841FA71BEA00D0F5E7 /* Project object */; } diff --git a/Chapter1/BareBasic/BareBasic.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter1/BareBasic/BareBasic.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..a2f94f8 --- /dev/null +++ b/Chapter1/BareBasic/BareBasic.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter1/BareBasic/BareBasic/AppDelegate.swift b/Chapter1/BareBasic/BareBasic/AppDelegate.swift index 7275f38..c8ef4ca 100644 --- a/Chapter1/BareBasic/BareBasic/AppDelegate.swift +++ b/Chapter1/BareBasic/BareBasic/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // BareBasic // -// Created by Lingostar on 2015. 10. 28.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 30.. +// Copyright © 2017년 CodersHigh. All rights reserved. // import UIKit @@ -14,30 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/Chapter1/BareBasic/BareBasic/Assets.xcassets/AppIcon.appiconset/Contents.json b/Chapter1/BareBasic/BareBasic/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..1d060ed 100644 --- a/Chapter1/BareBasic/BareBasic/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Chapter1/BareBasic/BareBasic/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/Chapter1/BareBasic/BareBasic/Base.lproj/LaunchScreen.storyboard b/Chapter1/BareBasic/BareBasic/Base.lproj/LaunchScreen.storyboard index 2e721e1..f83f6fd 100644 --- a/Chapter1/BareBasic/BareBasic/Base.lproj/LaunchScreen.storyboard +++ b/Chapter1/BareBasic/BareBasic/Base.lproj/LaunchScreen.storyboard @@ -1,22 +1,20 @@ - + - + + + - - - - - + - - + + diff --git a/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard b/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard index 090b02d..03c13c2 100644 --- a/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard +++ b/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard @@ -1,38 +1,21 @@ - - + + - + + + - - - - - + - - - - - - - - - - + + - diff --git a/Chapter1/BareBasic/BareBasic/Info.plist b/Chapter1/BareBasic/BareBasic/Info.plist index 40c6215..16be3b6 100644 --- a/Chapter1/BareBasic/BareBasic/Info.plist +++ b/Chapter1/BareBasic/BareBasic/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/Chapter1/BareBasic/BareBasic/ViewController.swift b/Chapter1/BareBasic/BareBasic/ViewController.swift index 236ec97..a0c9957 100644 --- a/Chapter1/BareBasic/BareBasic/ViewController.swift +++ b/Chapter1/BareBasic/BareBasic/ViewController.swift @@ -2,8 +2,8 @@ // ViewController.swift // BareBasic // -// Created by Lingostar on 2015. 10. 28.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 30.. +// Copyright © 2017년 CodersHigh. All rights reserved. // import UIKit From 5bbf42e1f95f64998df9e7ecadfaf6f0427e7639 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 17:40:18 +0900 Subject: [PATCH 02/12] Chapter 1-2 --- .../BareBasic/Base.lproj/Main.storyboard | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard b/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard index 03c13c2..05599f9 100644 --- a/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard +++ b/Chapter1/BareBasic/BareBasic/Base.lproj/Main.storyboard @@ -1,7 +1,10 @@ - + + + + - + @@ -9,16 +12,31 @@ - + - + + + + + + + + + + From 67aa2dd8eb1ef4142c1b6e2929298f0f77b04d5b Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 23:09:45 +0900 Subject: [PATCH 03/12] Chapter 1-4 --- .../HelloiPhone.xcodeproj/project.pbxproj | 181 +++++++++++------- .../contents.xcworkspacedata | 7 + .../HelloiPhone/HelloiPhone/AppDelegate.swift | 20 +- .../AppIcon.appiconset/Contents.json | 25 +++ .../Base.lproj/LaunchScreen.storyboard | 16 +- .../HelloiPhone/Base.lproj/Main.storyboard | 43 +++-- Chapter1/HelloiPhone/HelloiPhone/Info.plist | 4 +- .../HelloiPhone/ViewController.swift | 15 +- 8 files changed, 188 insertions(+), 123 deletions(-) create mode 100644 Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.pbxproj b/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.pbxproj index 3d35882..3483b33 100644 --- a/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.pbxproj +++ b/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.pbxproj @@ -3,29 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2CDB310C1BE78B420060471E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CDB310B1BE78B420060471E /* AppDelegate.swift */; }; - 2CDB310E1BE78B420060471E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CDB310D1BE78B420060471E /* ViewController.swift */; }; - 2CDB31111BE78B420060471E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2CDB310F1BE78B420060471E /* Main.storyboard */; }; - 2CDB31131BE78B420060471E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2CDB31121BE78B420060471E /* Assets.xcassets */; }; - 2CDB31161BE78B420060471E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2CDB31141BE78B420060471E /* LaunchScreen.storyboard */; }; + CD7710AE1FA768F500D0F5E7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7710AD1FA768F500D0F5E7 /* AppDelegate.swift */; }; + CD7710B01FA768F500D0F5E7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD7710AF1FA768F500D0F5E7 /* ViewController.swift */; }; + CD7710B31FA768F500D0F5E7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD7710B11FA768F500D0F5E7 /* Main.storyboard */; }; + CD7710B51FA768F500D0F5E7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD7710B41FA768F500D0F5E7 /* Assets.xcassets */; }; + CD7710B81FA768F500D0F5E7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD7710B61FA768F500D0F5E7 /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 2CDB31081BE78B420060471E /* HelloiPhone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloiPhone.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2CDB310B1BE78B420060471E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2CDB310D1BE78B420060471E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2CDB31101BE78B420060471E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2CDB31121BE78B420060471E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2CDB31151BE78B420060471E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2CDB31171BE78B420060471E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD7710AA1FA768F500D0F5E7 /* HelloiPhone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloiPhone.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CD7710AD1FA768F500D0F5E7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + CD7710AF1FA768F500D0F5E7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + CD7710B21FA768F500D0F5E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CD7710B41FA768F500D0F5E7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + CD7710B71FA768F500D0F5E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + CD7710B91FA768F500D0F5E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2CDB31051BE78B420060471E /* Frameworks */ = { + CD7710A71FA768F500D0F5E7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -35,31 +35,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2CDB30FF1BE78B420060471E = { + CD7710A11FA768F500D0F5E7 = { isa = PBXGroup; children = ( - 2CDB310A1BE78B420060471E /* HelloiPhone */, - 2CDB31091BE78B420060471E /* Products */, + CD7710AC1FA768F500D0F5E7 /* HelloiPhone */, + CD7710AB1FA768F500D0F5E7 /* Products */, ); sourceTree = ""; }; - 2CDB31091BE78B420060471E /* Products */ = { + CD7710AB1FA768F500D0F5E7 /* Products */ = { isa = PBXGroup; children = ( - 2CDB31081BE78B420060471E /* HelloiPhone.app */, + CD7710AA1FA768F500D0F5E7 /* HelloiPhone.app */, ); name = Products; sourceTree = ""; }; - 2CDB310A1BE78B420060471E /* HelloiPhone */ = { + CD7710AC1FA768F500D0F5E7 /* HelloiPhone */ = { isa = PBXGroup; children = ( - 2CDB310B1BE78B420060471E /* AppDelegate.swift */, - 2CDB310D1BE78B420060471E /* ViewController.swift */, - 2CDB310F1BE78B420060471E /* Main.storyboard */, - 2CDB31121BE78B420060471E /* Assets.xcassets */, - 2CDB31141BE78B420060471E /* LaunchScreen.storyboard */, - 2CDB31171BE78B420060471E /* Info.plist */, + CD7710AD1FA768F500D0F5E7 /* AppDelegate.swift */, + CD7710AF1FA768F500D0F5E7 /* ViewController.swift */, + CD7710B11FA768F500D0F5E7 /* Main.storyboard */, + CD7710B41FA768F500D0F5E7 /* Assets.xcassets */, + CD7710B61FA768F500D0F5E7 /* LaunchScreen.storyboard */, + CD7710B91FA768F500D0F5E7 /* Info.plist */, ); path = HelloiPhone; sourceTree = ""; @@ -67,13 +67,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2CDB31071BE78B420060471E /* HelloiPhone */ = { + CD7710A91FA768F500D0F5E7 /* HelloiPhone */ = { isa = PBXNativeTarget; - buildConfigurationList = 2CDB311A1BE78B420060471E /* Build configuration list for PBXNativeTarget "HelloiPhone" */; + buildConfigurationList = CD7710BC1FA768F500D0F5E7 /* Build configuration list for PBXNativeTarget "HelloiPhone" */; buildPhases = ( - 2CDB31041BE78B420060471E /* Sources */, - 2CDB31051BE78B420060471E /* Frameworks */, - 2CDB31061BE78B420060471E /* Resources */, + CD7710A61FA768F500D0F5E7 /* Sources */, + CD7710A71FA768F500D0F5E7 /* Frameworks */, + CD7710A81FA768F500D0F5E7 /* Resources */, ); buildRules = ( ); @@ -81,79 +81,81 @@ ); name = HelloiPhone; productName = HelloiPhone; - productReference = 2CDB31081BE78B420060471E /* HelloiPhone.app */; + productReference = CD7710AA1FA768F500D0F5E7 /* HelloiPhone.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2CDB31001BE78B420060471E /* Project object */ = { + CD7710A21FA768F500D0F5E7 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = CodersHigh; TargetAttributes = { - 2CDB31071BE78B420060471E = { - CreatedOnToolsVersion = 7.0.1; + CD7710A91FA768F500D0F5E7 = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 2CDB31031BE78B420060471E /* Build configuration list for PBXProject "HelloiPhone" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = CD7710A51FA768F500D0F5E7 /* Build configuration list for PBXProject "HelloiPhone" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2CDB30FF1BE78B420060471E; - productRefGroup = 2CDB31091BE78B420060471E /* Products */; + mainGroup = CD7710A11FA768F500D0F5E7; + productRefGroup = CD7710AB1FA768F500D0F5E7 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2CDB31071BE78B420060471E /* HelloiPhone */, + CD7710A91FA768F500D0F5E7 /* HelloiPhone */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2CDB31061BE78B420060471E /* Resources */ = { + CD7710A81FA768F500D0F5E7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2CDB31161BE78B420060471E /* LaunchScreen.storyboard in Resources */, - 2CDB31131BE78B420060471E /* Assets.xcassets in Resources */, - 2CDB31111BE78B420060471E /* Main.storyboard in Resources */, + CD7710B81FA768F500D0F5E7 /* LaunchScreen.storyboard in Resources */, + CD7710B51FA768F500D0F5E7 /* Assets.xcassets in Resources */, + CD7710B31FA768F500D0F5E7 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2CDB31041BE78B420060471E /* Sources */ = { + CD7710A61FA768F500D0F5E7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2CDB310E1BE78B420060471E /* ViewController.swift in Sources */, - 2CDB310C1BE78B420060471E /* AppDelegate.swift in Sources */, + CD7710B01FA768F500D0F5E7 /* ViewController.swift in Sources */, + CD7710AE1FA768F500D0F5E7 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 2CDB310F1BE78B420060471E /* Main.storyboard */ = { + CD7710B11FA768F500D0F5E7 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2CDB31101BE78B420060471E /* Base */, + CD7710B21FA768F500D0F5E7 /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2CDB31141BE78B420060471E /* LaunchScreen.storyboard */ = { + CD7710B61FA768F500D0F5E7 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2CDB31151BE78B420060471E /* Base */, + CD7710B71FA768F500D0F5E7 /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -161,29 +163,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2CDB31181BE78B420060471E /* Debug */ = { + CD7710BA1FA768F500D0F5E7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -197,38 +211,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2CDB31191BE78B420060471E /* Release */ = { + CD7710BB1FA768F500D0F5E7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + 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; @@ -236,57 +262,64 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2CDB311B1BE78B420060471E /* Debug */ = { + CD7710BD1FA768F500D0F5E7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = HelloiPhone/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.HelloiPhone; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2CDB311C1BE78B420060471E /* Release */ = { + CD7710BE1FA768F500D0F5E7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = HelloiPhone/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.HelloiPhone; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2CDB31031BE78B420060471E /* Build configuration list for PBXProject "HelloiPhone" */ = { + CD7710A51FA768F500D0F5E7 /* Build configuration list for PBXProject "HelloiPhone" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2CDB31181BE78B420060471E /* Debug */, - 2CDB31191BE78B420060471E /* Release */, + CD7710BA1FA768F500D0F5E7 /* Debug */, + CD7710BB1FA768F500D0F5E7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2CDB311A1BE78B420060471E /* Build configuration list for PBXNativeTarget "HelloiPhone" */ = { + CD7710BC1FA768F500D0F5E7 /* Build configuration list for PBXNativeTarget "HelloiPhone" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2CDB311B1BE78B420060471E /* Debug */, - 2CDB311C1BE78B420060471E /* Release */, + CD7710BD1FA768F500D0F5E7 /* Debug */, + CD7710BE1FA768F500D0F5E7 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2CDB31001BE78B420060471E /* Project object */; + rootObject = CD7710A21FA768F500D0F5E7 /* Project object */; } diff --git a/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ca797d8 --- /dev/null +++ b/Chapter1/HelloiPhone/HelloiPhone.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter1/HelloiPhone/HelloiPhone/AppDelegate.swift b/Chapter1/HelloiPhone/HelloiPhone/AppDelegate.swift index 039c981..7caf8eb 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/AppDelegate.swift +++ b/Chapter1/HelloiPhone/HelloiPhone/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // HelloiPhone // -// Created by Lingostar on 2015. 11. 2.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 30.. +// Copyright © 2017년 CodersHigh. All rights reserved. // import UIKit @@ -14,30 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/Chapter1/HelloiPhone/HelloiPhone/Assets.xcassets/AppIcon.appiconset/Contents.json b/Chapter1/HelloiPhone/HelloiPhone/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..1d060ed 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Chapter1/HelloiPhone/HelloiPhone/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/LaunchScreen.storyboard b/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/LaunchScreen.storyboard index 2e721e1..f83f6fd 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/LaunchScreen.storyboard +++ b/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/LaunchScreen.storyboard @@ -1,22 +1,20 @@ - + - + + + - - - - - + - - + + diff --git a/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/Main.storyboard b/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/Main.storyboard index f46a720..e43bd59 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/Main.storyboard +++ b/Chapter1/HelloiPhone/HelloiPhone/Base.lproj/Main.storyboard @@ -1,48 +1,49 @@ - - + + + + + - + + + - - - - - - - + + - - + + - + diff --git a/Chapter1/HelloiPhone/HelloiPhone/Info.plist b/Chapter1/HelloiPhone/HelloiPhone/Info.plist index 40c6215..16be3b6 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/Info.plist +++ b/Chapter1/HelloiPhone/HelloiPhone/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/Chapter1/HelloiPhone/HelloiPhone/ViewController.swift b/Chapter1/HelloiPhone/HelloiPhone/ViewController.swift index 6f639b6..879266f 100644 --- a/Chapter1/HelloiPhone/HelloiPhone/ViewController.swift +++ b/Chapter1/HelloiPhone/HelloiPhone/ViewController.swift @@ -2,28 +2,31 @@ // ViewController.swift // HelloiPhone // -// Created by Lingostar on 2015. 11. 2.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 30.. +// Copyright © 2017년 CodersHigh. All rights reserved. // import UIKit class ViewController: UIViewController { - @IBOutlet weak var myLabel: UILabel! + @IBOutlet weak var thisLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } + override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } + + @IBAction func change(_ sender: Any) { + + thisLabel.text = "Hello iPhone" + } - @IBAction func change(sender: AnyObject) { - myLabel.text = "Hello World" - } } From ca891aa3ed937244f57c0ab1ba7fe63804eab2c0 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 23:28:04 +0900 Subject: [PATCH 04/12] chapter 2 --- Chapter2/Session2.playground/Contents.swift | 22 ++++++++++--------- .../contents.xcworkspacedata | 7 ++++++ .../Session2.playground/timeline.xctimeline | 14 ++++++------ 3 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata diff --git a/Chapter2/Session2.playground/Contents.swift b/Chapter2/Session2.playground/Contents.swift index daf3d6f..fc5f1c8 100644 --- a/Chapter2/Session2.playground/Contents.swift +++ b/Chapter2/Session2.playground/Contents.swift @@ -26,7 +26,7 @@ let hasProtocol:Bool = url.hasPrefix("http://") print("\(name)") print("\(name) has \(count) characters") -//currentSpeed += Int(20.5) +currentSpeed += Int(20.5) let intMax = Int.max let UintMax = UInt.max @@ -45,6 +45,8 @@ let time1 = (9,0,48) time1.0 let time2:(h:Int, m:Int, s:Int) = (11,51,5) time2.h +time2.m +time1.2 let duration = (time1, time2) let (start, end) = duration @@ -54,7 +56,7 @@ typealias Time = (h:Int, m:Int, s:Int) typealias Duration = (start:Time, end:Time) let today:Duration = ((9,10,23), (17,8,21)) -print("We studied \(today.end.h - today.start.h) hours today") +print("We studied until \(today.end.h) hours today") //: Session 2-5 컬렉션 @@ -94,7 +96,7 @@ roomCapacity["Kahlo"] let roomNames = [String](roomCapacity.keys) let capacities = [Int](roomCapacity.values) -let total = capacities.reduce(0, combine: +) +let total = capacities.reduce(0, +) //: Session 2-6 컬렉션2 Set let subway2 :Set = ["시청", "을지로입구", "을지로3가", "을지로4가","동대문역사문화공원", "신당", "상왕십리", "왕십리", "한양대", "뚝섬", "성수", "건대입구", "구의", "강변", "잠실나루", "잠실", "신천", "종합운동장", "삼성", "선릉", "역삼", "강남", "교대", "서초", "방배", "사당", "낙성대", "서울대입구", "봉천", "신림", "신대방", "구로디지털단지", "대림", "신도림", "문래", "영등포구청", "당산", "합정", "홍대입구", "신촌", "이대", "아현", "충정로"] @@ -103,14 +105,14 @@ subway2.count let subway3 :Set = ["지축", "구파발", "연신내", "불광", "녹번", "홍제", "무악재", "독립문", "경복궁", "안국", "종로3가", "을지로3가", "충무로", "동대입구", "약수", "금호", "옥수", "압구정", "신사", "잠원", "고속터미널", "교대", "남부터미널", "양재", "매봉", "도곡", "대치", "학여울", "대청", "일원", "수서", "가락시장", "경찰병원", "오금"] subway3.count -let transfer = subway2.intersect(subway3) +let transfer = subway2.intersection(subway3) transfer.count -let notTransfer = subway2.subtract(subway3) +let notTransfer = subway2.subtracting(subway3) notTransfer.count let union = subway2.union(subway3) union.count -let exOR = subway2.exclusiveOr(subway3) +let exOR = subway2.symmetricDifference(subway3) exOR.count if transfer.count > 0 { @@ -189,7 +191,7 @@ bookDescription += "\r\nsupport web page: \(supportingURL)" func ratingRecord (history:[Double]) -> (average:Double, min:Double, max:Double)? { - if history.count == 0 { return nil } + //if history.count == 0 { return nil } var sum = 0.0, min = history[0], max = history[0] @@ -206,7 +208,7 @@ func ratingRecord (history:[Double]) -> (average:Double, min:Double, max:Double) ratings = [3.5, 2.0, 4.5, 5.0] bookDescription = "\(title)" -if let theRatings = ratings , record = ratingRecord(theRatings) { +if let theRatings = ratings, let record = ratingRecord(history: theRatings) { bookDescription += " has \(theRatings.count) ratings, \r\n average is \(record.average), from \(record.min) to \(record.max)" } else { bookDescription += " has no ratings yet" @@ -438,7 +440,7 @@ _={ } func callTaskToBoss() -> Task? { - if let myBoss = boss, callTo = myBoss.phoneNumber { + if let myBoss = boss, let callTo = myBoss.phoneNumber { var callTask = Task(type: .Call, owner: self) return callTask } @@ -539,7 +541,7 @@ _={ } func callTaskToBoss() -> Task? { - if let myBoss = boss, callTo = myBoss.phoneNumber { + if let myBoss = boss, let callTo = myBoss.phoneNumber { var callTask = Task(type: .Call(number:callTo), owner: self) return callTask } diff --git a/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata b/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Chapter2/Session2.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter2/Session2.playground/timeline.xctimeline b/Chapter2/Session2.playground/timeline.xctimeline index 2eeb328..9c857d2 100644 --- a/Chapter2/Session2.playground/timeline.xctimeline +++ b/Chapter2/Session2.playground/timeline.xctimeline @@ -3,39 +3,39 @@ version = "3.0"> From fff1e99c832d25ff9725d38d446d54a3de307cf6 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 23:30:48 +0900 Subject: [PATCH 05/12] chapter 3 - moneyconverter --- .../MoneyConverter.xcodeproj/project.pbxproj | 195 ++++++++++-------- .../contents.xcworkspacedata | 7 + .../MoneyConverter/AppDelegate.swift | 27 +-- .../AppIcon.appiconset/Contents.json | 25 +++ .../Base.lproj/LaunchScreen.storyboard | 16 +- .../MoneyConverter/Base.lproj/Main.storyboard | 94 ++++----- .../MoneyConverter/MoneyConverter/Info.plist | 4 +- .../MoneyConverter/MoneyConverter/Money.swift | 60 +++--- .../MoneyConverter/ViewController.swift | 43 ++-- 9 files changed, 255 insertions(+), 216 deletions(-) create mode 100644 SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj index f11efb9..85d7594 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj +++ b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.pbxproj @@ -3,31 +3,31 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C99854A1C224D6000FB4C4B /* Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9985491C224D6000FB4C4B /* Money.swift */; }; - 2C9AD9EF1C214348004D41FE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */; }; - 2C9AD9F11C214348004D41FE /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F01C214348004D41FE /* ViewController.swift */; }; - 2C9AD9F41C214348004D41FE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F21C214348004D41FE /* Main.storyboard */; }; - 2C9AD9F61C214348004D41FE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F51C214348004D41FE /* Assets.xcassets */; }; - 2C9AD9F91C214348004D41FE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */; }; + CD28D00C1F9E1F3C00C7BC8E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD28D00B1F9E1F3C00C7BC8E /* AppDelegate.swift */; }; + CD28D00E1F9E1F3C00C7BC8E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD28D00D1F9E1F3C00C7BC8E /* ViewController.swift */; }; + CD28D0111F9E1F3C00C7BC8E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD28D00F1F9E1F3C00C7BC8E /* Main.storyboard */; }; + CD28D0131F9E1F3C00C7BC8E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD28D0121F9E1F3C00C7BC8E /* Assets.xcassets */; }; + CD28D0161F9E1F3C00C7BC8E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD28D0141F9E1F3C00C7BC8E /* LaunchScreen.storyboard */; }; + CD28D01E1F9E23FA00C7BC8E /* Money.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD28D01D1F9E23FA00C7BC8E /* Money.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 2C9985491C224D6000FB4C4B /* Money.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Money.swift; sourceTree = ""; }; - 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoneyConverter.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C9AD9F01C214348004D41FE /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2C9AD9F31C214348004D41FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C9AD9F51C214348004D41FE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C9AD9F81C214348004D41FE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C9AD9FA1C214348004D41FE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD28D0081F9E1F3C00C7BC8E /* MoneyConverter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MoneyConverter.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CD28D00B1F9E1F3C00C7BC8E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + CD28D00D1F9E1F3C00C7BC8E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + CD28D0101F9E1F3C00C7BC8E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CD28D0121F9E1F3C00C7BC8E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + CD28D0151F9E1F3C00C7BC8E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + CD28D0171F9E1F3C00C7BC8E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD28D01D1F9E23FA00C7BC8E /* Money.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Money.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C9AD9E81C214347004D41FE /* Frameworks */ = { + CD28D0051F9E1F3C00C7BC8E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -37,32 +37,32 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C9AD9E21C214347004D41FE = { + CD28CFFF1F9E1F3C00C7BC8E = { isa = PBXGroup; children = ( - 2C9AD9ED1C214348004D41FE /* MoneyConverter */, - 2C9AD9EC1C214347004D41FE /* Products */, + CD28D00A1F9E1F3C00C7BC8E /* MoneyConverter */, + CD28D0091F9E1F3C00C7BC8E /* Products */, ); sourceTree = ""; }; - 2C9AD9EC1C214347004D41FE /* Products */ = { + CD28D0091F9E1F3C00C7BC8E /* Products */ = { isa = PBXGroup; children = ( - 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */, + CD28D0081F9E1F3C00C7BC8E /* MoneyConverter.app */, ); name = Products; sourceTree = ""; }; - 2C9AD9ED1C214348004D41FE /* MoneyConverter */ = { + CD28D00A1F9E1F3C00C7BC8E /* MoneyConverter */ = { isa = PBXGroup; children = ( - 2C9AD9EE1C214348004D41FE /* AppDelegate.swift */, - 2C9AD9F01C214348004D41FE /* ViewController.swift */, - 2C9985491C224D6000FB4C4B /* Money.swift */, - 2C9AD9F21C214348004D41FE /* Main.storyboard */, - 2C9AD9F51C214348004D41FE /* Assets.xcassets */, - 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */, - 2C9AD9FA1C214348004D41FE /* Info.plist */, + CD28D00B1F9E1F3C00C7BC8E /* AppDelegate.swift */, + CD28D00D1F9E1F3C00C7BC8E /* ViewController.swift */, + CD28D01D1F9E23FA00C7BC8E /* Money.swift */, + CD28D00F1F9E1F3C00C7BC8E /* Main.storyboard */, + CD28D0121F9E1F3C00C7BC8E /* Assets.xcassets */, + CD28D0141F9E1F3C00C7BC8E /* LaunchScreen.storyboard */, + CD28D0171F9E1F3C00C7BC8E /* Info.plist */, ); path = MoneyConverter; sourceTree = ""; @@ -70,13 +70,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C9AD9EA1C214347004D41FE /* MoneyConverter */ = { + CD28D0071F9E1F3C00C7BC8E /* MoneyConverter */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C9AD9FD1C214348004D41FE /* Build configuration list for PBXNativeTarget "MoneyConverter" */; + buildConfigurationList = CD28D01A1F9E1F3C00C7BC8E /* Build configuration list for PBXNativeTarget "MoneyConverter" */; buildPhases = ( - 2C9AD9E71C214347004D41FE /* Sources */, - 2C9AD9E81C214347004D41FE /* Frameworks */, - 2C9AD9E91C214347004D41FE /* Resources */, + CD28D0041F9E1F3C00C7BC8E /* Sources */, + CD28D0051F9E1F3C00C7BC8E /* Frameworks */, + CD28D0061F9E1F3C00C7BC8E /* Resources */, ); buildRules = ( ); @@ -84,81 +84,82 @@ ); name = MoneyConverter; productName = MoneyConverter; - productReference = 2C9AD9EB1C214347004D41FE /* MoneyConverter.app */; + productReference = CD28D0081F9E1F3C00C7BC8E /* MoneyConverter.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C9AD9E31C214347004D41FE /* Project object */ = { + CD28D0001F9E1F3C00C7BC8E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = CodersHigh; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = Segaon_PC; TargetAttributes = { - 2C9AD9EA1C214347004D41FE = { - CreatedOnToolsVersion = 7.1; + CD28D0071F9E1F3C00C7BC8E = { + CreatedOnToolsVersion = 9.0.1; + ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 2C9AD9E61C214347004D41FE /* Build configuration list for PBXProject "MoneyConverter" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = CD28D0031F9E1F3C00C7BC8E /* Build configuration list for PBXProject "MoneyConverter" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C9AD9E21C214347004D41FE; - productRefGroup = 2C9AD9EC1C214347004D41FE /* Products */; + mainGroup = CD28CFFF1F9E1F3C00C7BC8E; + productRefGroup = CD28D0091F9E1F3C00C7BC8E /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C9AD9EA1C214347004D41FE /* MoneyConverter */, + CD28D0071F9E1F3C00C7BC8E /* MoneyConverter */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C9AD9E91C214347004D41FE /* Resources */ = { + CD28D0061F9E1F3C00C7BC8E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C9AD9F91C214348004D41FE /* LaunchScreen.storyboard in Resources */, - 2C9AD9F61C214348004D41FE /* Assets.xcassets in Resources */, - 2C9AD9F41C214348004D41FE /* Main.storyboard in Resources */, + CD28D0161F9E1F3C00C7BC8E /* LaunchScreen.storyboard in Resources */, + CD28D0131F9E1F3C00C7BC8E /* Assets.xcassets in Resources */, + CD28D0111F9E1F3C00C7BC8E /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C9AD9E71C214347004D41FE /* Sources */ = { + CD28D0041F9E1F3C00C7BC8E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C99854A1C224D6000FB4C4B /* Money.swift in Sources */, - 2C9AD9F11C214348004D41FE /* ViewController.swift in Sources */, - 2C9AD9EF1C214348004D41FE /* AppDelegate.swift in Sources */, + CD28D01E1F9E23FA00C7BC8E /* Money.swift in Sources */, + CD28D00E1F9E1F3C00C7BC8E /* ViewController.swift in Sources */, + CD28D00C1F9E1F3C00C7BC8E /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 2C9AD9F21C214348004D41FE /* Main.storyboard */ = { + CD28D00F1F9E1F3C00C7BC8E /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9AD9F31C214348004D41FE /* Base */, + CD28D0101F9E1F3C00C7BC8E /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C9AD9F71C214348004D41FE /* LaunchScreen.storyboard */ = { + CD28D0141F9E1F3C00C7BC8E /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C9AD9F81C214348004D41FE /* Base */, + CD28D0151F9E1F3C00C7BC8E /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -166,29 +167,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C9AD9FB1C214348004D41FE /* Debug */ = { + CD28D0181F9E1F3C00C7BC8E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -202,38 +215,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9AD9FC1C214348004D41FE /* Release */ = { + CD28D0191F9E1F3C00C7BC8E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + 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; @@ -241,58 +266,64 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C9AD9FE1C214348004D41FE /* Debug */ = { + CD28D01B1F9E1F3C00C7BC8E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MoneyConverter/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MoneyConverter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.MoneyConverter; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C9AD9FF1C214348004D41FE /* Release */ = { + CD28D01C1F9E1F3C00C7BC8E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MoneyConverter/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MoneyConverter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.MoneyConverter; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C9AD9E61C214347004D41FE /* Build configuration list for PBXProject "MoneyConverter" */ = { + CD28D0031F9E1F3C00C7BC8E /* Build configuration list for PBXProject "MoneyConverter" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9AD9FB1C214348004D41FE /* Debug */, - 2C9AD9FC1C214348004D41FE /* Release */, + CD28D0181F9E1F3C00C7BC8E /* Debug */, + CD28D0191F9E1F3C00C7BC8E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C9AD9FD1C214348004D41FE /* Build configuration list for PBXNativeTarget "MoneyConverter" */ = { + CD28D01A1F9E1F3C00C7BC8E /* Build configuration list for PBXNativeTarget "MoneyConverter" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C9AD9FE1C214348004D41FE /* Debug */, - 2C9AD9FF1C214348004D41FE /* Release */, + CD28D01B1F9E1F3C00C7BC8E /* Debug */, + CD28D01C1F9E1F3C00C7BC8E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C9AD9E31C214347004D41FE /* Project object */; + rootObject = CD28D0001F9E1F3C00C7BC8E /* Project object */; } diff --git a/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5566428 --- /dev/null +++ b/SampleCodes/MoneyConverter/MoneyConverter.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift b/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift index 2217838..5c31aaf 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 16.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 23.. +// Copyright © 2017년 Segaon_PC. All rights reserved. // import UIKit @@ -14,37 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - - - - - - - return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json b/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json index 36d2c80..1d060ed 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SampleCodes/MoneyConverter/MoneyConverter/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -59,6 +79,11 @@ "idiom" : "ipad", "size" : "76x76", "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" } ], "info" : { diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard index 2e721e1..f83f6fd 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard +++ b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/LaunchScreen.storyboard @@ -1,22 +1,20 @@ - + - + + + - - - - - + - - + + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard index 89f6126..3e17ccd 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard +++ b/SampleCodes/MoneyConverter/MoneyConverter/Base.lproj/Main.storyboard @@ -1,81 +1,81 @@ - - + + + + + - - + + + - - - - - - + + + - - - + - - - - + + - - - - + + + - + diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Info.plist b/SampleCodes/MoneyConverter/MoneyConverter/Info.plist index 40c6215..16be3b6 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Info.plist +++ b/SampleCodes/MoneyConverter/MoneyConverter/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/SampleCodes/MoneyConverter/MoneyConverter/Money.swift b/SampleCodes/MoneyConverter/MoneyConverter/Money.swift index 169ee64..7b77ae7 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/Money.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/Money.swift @@ -2,59 +2,59 @@ // Money.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 17.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 23.. +// Copyright © 2017년 Segaon_PC. All rights reserved. // import Foundation -import MapKit -enum Currency:Int { + + +enum Currency: Int { case USD = 0, KRW, JPY, EUR - var symbol:String { - get { + + var ratio: Double { + get{ switch self { - case .USD : return "$" - case .KRW : return "₩" - case .JPY : return "¥" - case .EUR : return "€" + case .USD: return 1.0 + case .KRW: return 1178.5 + case .JPY: return 122.45 + case .EUR: return 0.92 } } } - var ratio:Double { + var symbol: String { get { switch self { - case .USD : return 1.0 - case .KRW : return 1178.5 - case .JPY : return 122.45 - case .EUR : return 0.92 - } + case .USD: return "$" + case .KRW: return "₩" + case .JPY: return "¥" + case .EUR: return "€" } } + } + + } struct Money { - //var location:CLLocationCoordinate2D - - var usdollar = 0.0 + var usDollar = 0.0 - init(_ _usdollar:Double){ - usdollar = _usdollar + init(_ _usdollar:Double) { + usDollar = _usdollar } - init(_ amount:Double, currency:Currency){ - usdollar = amount / currency.ratio + init(_ amount: Double, currency: Currency) { + usDollar = amount / currency.ratio } - - func valueInCurrency(currency:Currency) -> String { - return "\(currency.symbol) " + "\(usdollar*currency.ratio)" + + func valueInCurrency(currency: Currency) -> String { + return "\(currency.symbol)" + "\(usDollar * currency.ratio)" } } -let money = Money(120.0) -let koreanIncome = Money(500_000 , currency:.KRW) - - +let myMoney = Money(120) +let incomeInKRW = Money(350_000, currency: .KRW) diff --git a/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift b/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift index 659723e..68fa70f 100644 --- a/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift +++ b/SampleCodes/MoneyConverter/MoneyConverter/ViewController.swift @@ -2,16 +2,18 @@ // ViewController.swift // MoneyConverter // -// Created by Lingostar on 2015. 12. 16.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 23.. +// Copyright © 2017년 Segaon_PC. All rights reserved. // import UIKit class ViewController: UIViewController { - + @IBOutlet weak var currencySegment: UISegmentedControl! + @IBOutlet weak var sourceMoneyField: UITextField! + @IBOutlet weak var targetMoneyLabel: UILabel! @@ -25,43 +27,28 @@ class ViewController: UIViewController { // Dispose of any resources that can be recreated. } - @IBAction func convertMoney(sender: AnyObject) { - guard let sourceCurrecy = Currency(rawValue:currencySegment.selectedSegmentIndex) else { + @IBAction func convertMoney(_ sender: Any) { + + guard let sourceCurrency = Currency(rawValue: currencySegment.selectedSegmentIndex) else { print("Source Currency Error") return - } // if let 의 확장판. if let을 썼을때 indent 불편을 없앰. - + } + guard let sourceAmount = Double(sourceMoneyField.text!) else { targetMoneyLabel.text = "Error" return } - let sourceMoney = Money(sourceAmount, currency: sourceCurrecy) + let sourceMoney = Money(sourceAmount, currency: sourceCurrency) - var targetMoneyString = "" - for (var i=0 ; i < 4 ; i++){ - targetMoneyString += sourceMoney.valueInCurrency(Currency.init(rawValue: i)!) + var targetMoneyString:String = "" + for i in 0...3 { + targetMoneyString += sourceMoney.valueInCurrency(currency: Currency.init(rawValue: i)!) targetMoneyString += "\r\n" } targetMoneyLabel.text = targetMoneyString - - /*if let sourceCurrecy = Currency(rawValue:currencySegment.selectedSegmentIndex) { - - if let sourceAmount = Double(sourceMoneyField.text!) { - - let sourceMoney = Money(sourceAmount, currency: sourceCurrecy) - - var targetMoneyString = "" - for (var i=0 ; i < 4 ; i++){ - targetMoneyString += sourceMoney.valueInCurrency(Currency.init(rawValue: i)!) - targetMoneyString += "\r\n" - } - - targetMoneyLabel.text = targetMoneyString - } - }*/ } - + } From 1d94329bb3a9510a38012a27eed5a396460ef146 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 23:43:10 +0900 Subject: [PATCH 06/12] chapter 5-1 --- Chapter5/SwiftFunctionType.playground/Contents.swift | 10 +++++----- .../playground.xcworkspace/contents.xcworkspacedata | 7 +++++++ .../SwiftFunctionType.playground/timeline.xctimeline | 4 ++-- 3 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata diff --git a/Chapter5/SwiftFunctionType.playground/Contents.swift b/Chapter5/SwiftFunctionType.playground/Contents.swift index 9222f30..369a000 100644 --- a/Chapter5/SwiftFunctionType.playground/Contents.swift +++ b/Chapter5/SwiftFunctionType.playground/Contents.swift @@ -4,9 +4,9 @@ import UIKit //: Session 5-1 Function Types -/*func addVAT(source:Double) -> Double { +func addVAT(source:Double) -> Double { return source * 1.1 -}*/ +} func couponDiscount(source:Double) -> Double { return source * 0.9 @@ -16,7 +16,7 @@ func couponDiscount(source:Double) -> Double { var additional:(Double) -> Double let transcation3219 = 120.7 -additional = addVAT +additional() = addVAT() let price3219 = additional(transcation3219) @@ -27,7 +27,7 @@ func finalPrice(source:Double, additional:(Double) -> Double) -> Double { return price } -let price3220 = finalPrice(350.0, additional: couponDiscount) +let price3220 = finalPrice(source: 350.0, additional: couponDiscount) //: Session 5-2 Closure @@ -128,7 +128,7 @@ func ascendantSort (sort1:Double, sort2:Double) -> Bool { return sort1 > sort2 } -let sortedPrices = vatPrices.sort(ascendantSort) +let sortedPrices = vatPrices.sorted(by:ascendantSort) let sortedPrices2 = vatPrices.sort({ sort1, sort2 in return sort1 > sort2 }) diff --git a/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata b/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Chapter5/SwiftFunctionType.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline index 6cdf29c..3da8a08 100644 --- a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline +++ b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From ce6cc71cb278098ced9dd9cf8c8c44748663f5c9 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Mon, 30 Oct 2017 23:53:16 +0900 Subject: [PATCH 07/12] chapter 5 --- .../Contents.swift | 42 +++++++++---------- .../timeline.xctimeline | 4 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Chapter5/SwiftFunctionType.playground/Contents.swift b/Chapter5/SwiftFunctionType.playground/Contents.swift index 369a000..6fa0575 100644 --- a/Chapter5/SwiftFunctionType.playground/Contents.swift +++ b/Chapter5/SwiftFunctionType.playground/Contents.swift @@ -16,7 +16,7 @@ func couponDiscount(source:Double) -> Double { var additional:(Double) -> Double let transcation3219 = 120.7 -additional() = addVAT() +additional = addVAT(source: ) let price3219 = additional(transcation3219) @@ -71,31 +71,31 @@ let price3221 = addVATClosure4(157.6) return adder }*/ -func makeAdder(x:Int) -> Int -> Int { +func makeAdder(x:Int) -> (Int) -> Int { return { return $0 + x; } } -let add5 = makeAdder(5) -let add10 = makeAdder(10) +let add5 = makeAdder(x: 5) +let add10 = makeAdder(x: 10) print(add5(2)) print(add10(2)) -print(makeAdder(5)(2)) +print(makeAdder(x: 5)(2)) //: Session 5-6 map let transactions = [560.0, 321.5, 190.0, 672.8, 1190.0, 450.0] -func addVAT(source:Double) -> Double { +/*func addVAT(source:Double) -> Double { return source * 1.1 -} +}*/ var vatPrices:[Double] = [] for transaction in transactions { - vatPrices += [addVAT(transaction)] + vatPrices += [addVAT(source: transaction)] } let vatMapPrices = transactions.map({ transaction -> Double in @@ -129,13 +129,13 @@ func ascendantSort (sort1:Double, sort2:Double) -> Bool { } let sortedPrices = vatPrices.sorted(by:ascendantSort) -let sortedPrices2 = vatPrices.sort({ sort1, sort2 in +let sortedPrices2 = vatPrices.sorted(by: { sort1, sort2 in return sort1 > sort2 }) -let sortedPrices3 = vatPrices.sort({ $0 > $1 }) -let sortedPrices4 = vatPrices.sort( > ) +let sortedPrices3 = vatPrices.sorted(by:{ $0 > $1 }) +let sortedPrices4 = vatPrices.sorted(by: > ) -let sortedMeetingRooms = meetingRooms.sort({$0.1 > $1.1}) +let sortedMeetingRooms = meetingRooms.sorted(by: {$0.1 > $1.1}) print("\(sortedMeetingRooms)") //: Session 5-9 reduce @@ -149,24 +149,24 @@ func priceSum (base:Double, adder:Double) -> Double { var sum:Double = 0.0 for price in vatPrices { - sum = priceSum(sum, adder: price) + sum = priceSum(base: sum, adder: price) } print("\(sum)") var sum2:Double = 0.0 -let sumReduce = vatPrices.reduce(sum2, combine: priceSum) -let sumReduce2 = vatPrices.reduce(0.0, combine: { base, adder in +let sumReduce = vatPrices.reduce(sum2, priceSum) +let sumReduce2 = vatPrices.reduce(0.0, { base, adder in base + adder }) -let sumReduce3 = vatPrices.reduce(0, combine: +) +let sumReduce3 = vatPrices.reduce(0, +) -let pricesInString = vatPrices.reduce("", combine:{$0 + "\($1)\n"}) +let pricesInString = vatPrices.reduce("", {$0 + "\($1)\n"}) print(pricesInString) -let descriptionString = meetingRooms.reduce("We have meeting rooms : \n", combine: { $0 + "\($1.0) for \($1.1) person \n" +let descriptionString = meetingRooms.reduce("We have meeting rooms : \n", { $0 + "\($1.0) for \($1.1) person \n" }) @@ -183,9 +183,9 @@ print(descriptionString) -let x = [10, 3, 20, 15, 4].sort {$0 < $1}.filter { $0 > 5 }.map { $0 * 100 } - -let x2 = [10, 3, 20, 15, 4].sort {$0 < $1} +let x = [10, 3, 20, 15, 4].sorted {$0 < $1} +let x1 = x.filter { $0 > 5 }.map { $0 * 100 } +let x2 = [10, 3, 20, 15, 4].sorted {$0 < $1} x2 diff --git a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline index 3da8a08..1a483fd 100644 --- a/Chapter5/SwiftFunctionType.playground/timeline.xctimeline +++ b/Chapter5/SwiftFunctionType.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From 60436b6be62c5d6b055a102227a02c769e2af02a Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Tue, 31 Oct 2017 00:00:18 +0900 Subject: [PATCH 08/12] Chapter 4 --- .../MeetingRooms.xcodeproj/project.pbxproj | 188 +++++++----- .../contents.xcworkspacedata | 7 + .../MeetingRooms/AppDelegate.swift | 20 +- .../4347286612_11577182f1_o.jpg | Bin 28131 -> 0 bytes .../Contents.json | 21 -- .../AppIcon.appiconset/Contents.json | 30 ++ .../Assets.xcassets/Contents.json | 6 - .../Base.lproj/LaunchScreen.storyboard | 16 +- .../MeetingRooms/Base.lproj/Main.storyboard | 289 ++++++++---------- .../MeetingRooms/MeetingRooms/Info.plist | 4 +- .../MeetingRooms/ViewController.swift | 4 +- 11 files changed, 296 insertions(+), 289 deletions(-) create mode 100644 SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/Contents.json delete mode 100644 SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/Contents.json diff --git a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj index 59c41e5..b9a0969 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj +++ b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.pbxproj @@ -3,29 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ - 2C6EF0961C2AB6D8002398BD /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */; }; - 2C6EF0981C2AB6D8002398BD /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6EF0971C2AB6D8002398BD /* ViewController.swift */; }; - 2C6EF09B1C2AB6D8002398BD /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF0991C2AB6D8002398BD /* Main.storyboard */; }; - 2C6EF09D1C2AB6D8002398BD /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */; }; - 2C6EF0A01C2AB6D8002398BD /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */; }; + CD5411DA1F83225E003840FF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5411D91F83225E003840FF /* AppDelegate.swift */; }; + CD5411DC1F83225E003840FF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD5411DB1F83225E003840FF /* ViewController.swift */; }; + CD5411DF1F83225E003840FF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD5411DD1F83225E003840FF /* Main.storyboard */; }; + CD5411E11F83225E003840FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CD5411E01F83225E003840FF /* Assets.xcassets */; }; + CD5411E41F83225E003840FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CD5411E21F83225E003840FF /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 2C6EF0971C2AB6D8002398BD /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 2C6EF09A1C2AB6D8002398BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 2C6EF09F1C2AB6D8002398BD /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 2C6EF0A11C2AB6D8002398BD /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + CD5411D61F83225E003840FF /* MeetingRooms.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeetingRooms.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CD5411D91F83225E003840FF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + CD5411DB1F83225E003840FF /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + CD5411DE1F83225E003840FF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + CD5411E01F83225E003840FF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + CD5411E31F83225E003840FF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + CD5411E51F83225E003840FF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 2C6EF08F1C2AB6D7002398BD /* Frameworks */ = { + CD5411D31F83225E003840FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -35,31 +35,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2C6EF0891C2AB6D7002398BD = { + CD5411CD1F83225E003840FF = { isa = PBXGroup; children = ( - 2C6EF0941C2AB6D7002398BD /* MeetingRooms */, - 2C6EF0931C2AB6D7002398BD /* Products */, + CD5411D81F83225E003840FF /* MeetingRooms */, + CD5411D71F83225E003840FF /* Products */, ); sourceTree = ""; }; - 2C6EF0931C2AB6D7002398BD /* Products */ = { + CD5411D71F83225E003840FF /* Products */ = { isa = PBXGroup; children = ( - 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */, + CD5411D61F83225E003840FF /* MeetingRooms.app */, ); name = Products; sourceTree = ""; }; - 2C6EF0941C2AB6D7002398BD /* MeetingRooms */ = { + CD5411D81F83225E003840FF /* MeetingRooms */ = { isa = PBXGroup; children = ( - 2C6EF0951C2AB6D8002398BD /* AppDelegate.swift */, - 2C6EF0971C2AB6D8002398BD /* ViewController.swift */, - 2C6EF0991C2AB6D8002398BD /* Main.storyboard */, - 2C6EF09C1C2AB6D8002398BD /* Assets.xcassets */, - 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */, - 2C6EF0A11C2AB6D8002398BD /* Info.plist */, + CD5411D91F83225E003840FF /* AppDelegate.swift */, + CD5411DB1F83225E003840FF /* ViewController.swift */, + CD5411DD1F83225E003840FF /* Main.storyboard */, + CD5411E01F83225E003840FF /* Assets.xcassets */, + CD5411E21F83225E003840FF /* LaunchScreen.storyboard */, + CD5411E51F83225E003840FF /* Info.plist */, ); path = MeetingRooms; sourceTree = ""; @@ -67,13 +67,13 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 2C6EF0911C2AB6D7002398BD /* MeetingRooms */ = { + CD5411D51F83225E003840FF /* MeetingRooms */ = { isa = PBXNativeTarget; - buildConfigurationList = 2C6EF0A41C2AB6D8002398BD /* Build configuration list for PBXNativeTarget "MeetingRooms" */; + buildConfigurationList = CD5411E81F83225E003840FF /* Build configuration list for PBXNativeTarget "MeetingRooms" */; buildPhases = ( - 2C6EF08E1C2AB6D7002398BD /* Sources */, - 2C6EF08F1C2AB6D7002398BD /* Frameworks */, - 2C6EF0901C2AB6D7002398BD /* Resources */, + CD5411D21F83225E003840FF /* Sources */, + CD5411D31F83225E003840FF /* Frameworks */, + CD5411D41F83225E003840FF /* Resources */, ); buildRules = ( ); @@ -81,80 +81,81 @@ ); name = MeetingRooms; productName = MeetingRooms; - productReference = 2C6EF0921C2AB6D7002398BD /* MeetingRooms.app */; + productReference = CD5411D61F83225E003840FF /* MeetingRooms.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 2C6EF08A1C2AB6D7002398BD /* Project object */ = { + CD5411CE1F83225E003840FF /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = CodersHigh; + LastSwiftUpdateCheck = 0900; + LastUpgradeCheck = 0900; + ORGANIZATIONNAME = Segaon_PC; TargetAttributes = { - 2C6EF0911C2AB6D7002398BD = { - CreatedOnToolsVersion = 7.1; + CD5411D51F83225E003840FF = { + CreatedOnToolsVersion = 9.0; + ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 2C6EF08D1C2AB6D7002398BD /* Build configuration list for PBXProject "MeetingRooms" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = CD5411D11F83225E003840FF /* Build configuration list for PBXProject "MeetingRooms" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = 2C6EF0891C2AB6D7002398BD; - productRefGroup = 2C6EF0931C2AB6D7002398BD /* Products */; + mainGroup = CD5411CD1F83225E003840FF; + productRefGroup = CD5411D71F83225E003840FF /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 2C6EF0911C2AB6D7002398BD /* MeetingRooms */, + CD5411D51F83225E003840FF /* MeetingRooms */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 2C6EF0901C2AB6D7002398BD /* Resources */ = { + CD5411D41F83225E003840FF /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C6EF0A01C2AB6D8002398BD /* LaunchScreen.storyboard in Resources */, - 2C6EF09D1C2AB6D8002398BD /* Assets.xcassets in Resources */, - 2C6EF09B1C2AB6D8002398BD /* Main.storyboard in Resources */, + CD5411E41F83225E003840FF /* LaunchScreen.storyboard in Resources */, + CD5411E11F83225E003840FF /* Assets.xcassets in Resources */, + CD5411DF1F83225E003840FF /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 2C6EF08E1C2AB6D7002398BD /* Sources */ = { + CD5411D21F83225E003840FF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2C6EF0981C2AB6D8002398BD /* ViewController.swift in Sources */, - 2C6EF0961C2AB6D8002398BD /* AppDelegate.swift in Sources */, + CD5411DC1F83225E003840FF /* ViewController.swift in Sources */, + CD5411DA1F83225E003840FF /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ - 2C6EF0991C2AB6D8002398BD /* Main.storyboard */ = { + CD5411DD1F83225E003840FF /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C6EF09A1C2AB6D8002398BD /* Base */, + CD5411DE1F83225E003840FF /* Base */, ); name = Main.storyboard; sourceTree = ""; }; - 2C6EF09E1C2AB6D8002398BD /* LaunchScreen.storyboard */ = { + CD5411E21F83225E003840FF /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( - 2C6EF09F1C2AB6D8002398BD /* Base */, + CD5411E31F83225E003840FF /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -162,29 +163,41 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 2C6EF0A21C2AB6D8002398BD /* Debug */ = { + CD5411E61F83225E003840FF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -198,38 +211,50 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C6EF0A31C2AB6D8002398BD /* Release */ = { + CD5411E71F83225E003840FF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + 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_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = 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_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[sdk=iphoneos*]" = "iPhone Developer"; + 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 = gnu99; + 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; @@ -237,57 +262,64 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; }; name = Release; }; - 2C6EF0A51C2AB6D8002398BD /* Debug */ = { + CD5411E91F83225E003840FF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRooms/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRooms; + PRODUCT_BUNDLE_IDENTIFIER = com.example.MeetingRooms; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - 2C6EF0A61C2AB6D8002398BD /* Release */ = { + CD5411EA1F83225E003840FF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = MeetingRooms/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRooms; + PRODUCT_BUNDLE_IDENTIFIER = com.example.MeetingRooms; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 2C6EF08D1C2AB6D7002398BD /* Build configuration list for PBXProject "MeetingRooms" */ = { + CD5411D11F83225E003840FF /* Build configuration list for PBXProject "MeetingRooms" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C6EF0A21C2AB6D8002398BD /* Debug */, - 2C6EF0A31C2AB6D8002398BD /* Release */, + CD5411E61F83225E003840FF /* Debug */, + CD5411E71F83225E003840FF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2C6EF0A41C2AB6D8002398BD /* Build configuration list for PBXNativeTarget "MeetingRooms" */ = { + CD5411E81F83225E003840FF /* Build configuration list for PBXNativeTarget "MeetingRooms" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C6EF0A51C2AB6D8002398BD /* Debug */, - 2C6EF0A61C2AB6D8002398BD /* Release */, + CD5411E91F83225E003840FF /* Debug */, + CD5411EA1F83225E003840FF /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 2C6EF08A1C2AB6D7002398BD /* Project object */; + rootObject = CD5411CE1F83225E003840FF /* Project object */; } diff --git a/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..ff41f19 --- /dev/null +++ b/SampleCodes/MeetingRooms/MeetingRooms.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift b/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift index 22c3a0d..598ab81 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift +++ b/SampleCodes/MeetingRooms/MeetingRooms/AppDelegate.swift @@ -2,8 +2,8 @@ // AppDelegate.swift // MeetingRooms // -// Created by Lingostar on 2015. 12. 23.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 3.. +// Copyright © 2017년 Segaon_PC. All rights reserved. // import UIKit @@ -14,30 +14,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. return true } - func applicationWillResignActive(application: UIApplication) { + 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + 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 inactive state; here you can undo many of the changes made on entering the background. + 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) { + 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) { + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg b/SampleCodes/MeetingRooms/MeetingRooms/Assets.xcassets/4347286612_11577182f1_o.imageset/4347286612_11577182f1_o.jpg deleted file mode 100644 index 829e21b43c12bacd242d4d95386725135c24dc15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28131 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 Zx3Hp$XqHKHeK*Rv - + - + + + - - - - - + - - + + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard b/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard index eae1517..eadd5b1 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard +++ b/SampleCodes/MeetingRooms/MeetingRooms/Base.lproj/Main.storyboard @@ -1,267 +1,236 @@ - - + + + + + - - + + - + - - + + - - - - + + + - - - + - - + + - - - + - + - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - - - + - - + + - - + + - - - - - + + - - + + - - - - - + + - - + + - - - - - + + - - - - + - + diff --git a/SampleCodes/MeetingRooms/MeetingRooms/Info.plist b/SampleCodes/MeetingRooms/MeetingRooms/Info.plist index 40c6215..16be3b6 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/Info.plist +++ b/SampleCodes/MeetingRooms/MeetingRooms/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -16,8 +16,6 @@ APPL CFBundleShortVersionString 1.0 - CFBundleSignature - ???? CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift b/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift index 435714c..13d1ff2 100644 --- a/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift +++ b/SampleCodes/MeetingRooms/MeetingRooms/ViewController.swift @@ -2,8 +2,8 @@ // ViewController.swift // MeetingRooms // -// Created by Lingostar on 2015. 12. 23.. -// Copyright © 2015년 CodersHigh. All rights reserved. +// Created by Segaon_PC on 2017. 10. 3.. +// Copyright © 2017년 Segaon_PC. All rights reserved. // import UIKit From 73cce2c9c64805ae7d56b43a3419c7c67a7a542e Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Tue, 31 Oct 2017 00:49:20 +0900 Subject: [PATCH 09/12] chapter 4-6 --- .../project.pbxproj | 20 +- .../contents.xcworkspacedata | 7 + .../MeetingRoomsDynamic/AppDelegate.swift | 2 +- .../AppIcon.appiconset/Contents.json | 25 ++ .../Base.lproj/Main.storyboard | 221 +++++++++--------- .../BranchListViewController.swift | 6 +- ...t => MeetingRoomsListViewController.swift} | 32 ++- 7 files changed, 180 insertions(+), 133 deletions(-) create mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/{MeetingRoomsListController.swift => MeetingRoomsListViewController.swift} (83%) diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj index cd8935e..648c48f 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 48; objects = { /* Begin PBXBuildFile section */ @@ -17,7 +17,7 @@ 2C9C276F1C958848002525E4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C276D1C958848002525E4 /* Main.storyboard */; }; 2C9C27711C958849002525E4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27701C958849002525E4 /* Assets.xcassets */; }; 2C9C27741C958849002525E4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27721C958849002525E4 /* LaunchScreen.storyboard */; }; - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */; }; + 2C9C277C1C9588BE002525E4 /* MeetingRoomsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */; }; 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */; }; 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */; }; 2CAA1EF81CB3FA7C0096F3FA /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */; }; @@ -36,7 +36,7 @@ 2C9C27701C958849002525E4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 2C9C27731C958849002525E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2C9C27751C958849002525E4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingRoomsListController.swift; sourceTree = ""; }; + 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingRoomsListViewController.swift; sourceTree = ""; }; 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; @@ -75,7 +75,7 @@ 2C9C27691C958848002525E4 /* AppDelegate.swift */, 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */, 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */, - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */, + 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */, 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */, 2C6F670F1CC233F5007EAEC7 /* RoomInfoViewController.swift */, 2C6F67111CC342F3007EAEC7 /* ReservationListViewController.swift */, @@ -127,7 +127,7 @@ }; }; buildConfigurationList = 2C9C27611C958847002525E4 /* Build configuration list for PBXProject "MeetingRoomsDynamic" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( @@ -168,7 +168,7 @@ 2C5B2DAA1CC726B8007D75DD /* EquipmentsListViewController.swift in Sources */, 2C6F67141CC34BDF007EAEC7 /* ReserveRoomViewController.swift in Sources */, 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */, - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */, + 2C9C277C1C9588BE002525E4 /* MeetingRoomsListViewController.swift in Sources */, 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */, 2C9C276A1C958848002525E4 /* AppDelegate.swift in Sources */, 2C6F67101CC233F5007EAEC7 /* RoomInfoViewController.swift in Sources */, @@ -234,7 +234,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -273,7 +273,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -286,9 +286,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = MeetingRoomsDynamic/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRoomsDynamic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; }; name = Debug; }; @@ -297,9 +299,11 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; INFOPLIST_FILE = MeetingRoomsDynamic/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.MeetingRoomsDynamic; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; }; name = Release; }; diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift index 7624358..4eb8359 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift @@ -38,7 +38,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { 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. - let userDefaultColor = NSUserDefaults.standardUserDefaults().integerForKey(TintColorKey) + let userDefaultColor = UserDefaults.standardUserDefaults().integerForKey(TintColorKey) guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { return } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json index eeea76c..d8db8d6 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,5 +1,15 @@ { "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "29x29", @@ -30,6 +40,16 @@ "size" : "60x60", "scale" : "3x" }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, { "idiom" : "ipad", "size" : "29x29", @@ -64,6 +84,11 @@ "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" } ], "info" : { diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard index 5958a44..d99a303 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard @@ -1,9 +1,12 @@ - - + + + + + - - + + @@ -11,15 +14,15 @@ - + - + - + - + @@ -49,15 +52,15 @@ - + - + - + - + @@ -79,31 +82,31 @@ - + - + - + - + - + @@ -130,79 +133,79 @@ - + - + - + - + - + - + - + - + @@ -213,48 +216,48 @@ - + - + - + - + @@ -265,17 +268,17 @@ - + - + @@ -306,28 +309,28 @@ - + - + - + - + - + @@ -341,14 +344,14 @@ - + - + - + @@ -356,7 +359,7 @@ @@ -370,21 +373,21 @@ - + - + - + @@ -398,20 +401,20 @@ - + - + - + @@ -426,20 +429,20 @@ - + - + - + @@ -489,7 +492,7 @@ - + @@ -506,29 +509,29 @@ - + - + - + - + @@ -553,7 +556,7 @@ - + @@ -573,17 +576,17 @@ - + - + @@ -595,7 +598,7 @@ - + @@ -622,9 +625,9 @@ - + - + @@ -641,9 +644,9 @@ - + - + @@ -660,9 +663,9 @@ - + - + @@ -677,7 +680,7 @@ - + @@ -698,7 +701,7 @@ - + @@ -715,29 +718,29 @@ - + - + - + - + @@ -767,7 +770,7 @@ - + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift index 2aaf60e..f8613e7 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift @@ -14,19 +14,19 @@ class BranchListViewController: UITableViewController { self.title = "지점" } - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let rowCount = dataCenter.branches.count return rowCount } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("BranchCell", forIndexPath: indexPath) + let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath as IndexPath) let branch = dataCenter.branches[indexPath.row] cell.textLabel?.text = branch.name diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift similarity index 83% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift rename to SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift index 2fda216..ef8e515 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift @@ -8,11 +8,11 @@ import UIKit -/* + class MeetingRoomsListController: UITableViewController { - //var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] - var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] + var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] + //var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] func meetingRoomsAtIndex(index:Int) -> (key:String, value:[String:Int]) { let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) @@ -40,35 +40,43 @@ class MeetingRoomsListController: UITableViewController { // MARK: - Table view data source - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections - return meetingRooms.count + return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows + return meetingRooms.count //let categoryValues = Array(meetingRooms.values)[section] //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) //let rowCount = orderedMeetingRooms[section].1.count - let rowCount = meetingRoomsAtIndex(section).value.count - return rowCount + //let rowCount = meetingRoomsAtIndex(section).value.count + //return rowCount } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) //let categoryValue = orderedMeetingRooms[indexPath.section].1 - let categoryValue = meetingRoomsAtIndex(indexPath.section).value + /*let categoryValue = meetingRoomsAtIndex(indexPath.section).value let orderedCategoryValues = categoryValue.sort({$0.1 < $1.1}) let roomName = orderedCategoryValues[indexPath.row].0 let capacity = orderedCategoryValues[indexPath.row].1 + */ + let roomNames = Array(meetingRooms.keys) + let roomNames[indexPath.row] cell.textLabel!.text = roomName - cell.detailTextLabel!.text = "\(capacity)" + if let capacity: Int = meetingRooms[roomName] + { + cell.detailTextLabel!.text = "\(capacity)" + } + //cell.detailTextLabel!.text = "\(capacity)" return cell } From 777085cef5e3162df71f54aa22ab280feb1ebf75 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Tue, 31 Oct 2017 00:55:20 +0900 Subject: [PATCH 10/12] chapter 4-7 --- .../MeetingRoomsListViewController.swift | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift index ef8e515..77234e2 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift @@ -11,8 +11,8 @@ import UIKit class MeetingRoomsListController: UITableViewController { - var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] - //var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] + //var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] + var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] func meetingRoomsAtIndex(index:Int) -> (key:String, value:[String:Int]) { let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) @@ -42,13 +42,14 @@ class MeetingRoomsListController: UITableViewController { override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections - return 1 + return meetingRooms.count } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows - return meetingRooms.count - //let categoryValues = Array(meetingRooms.values)[section] + //return meetingRooms.count + let categoryValues = Array(meetingRooms.values)[section] + let categoryValues.count //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) @@ -59,6 +60,8 @@ class MeetingRoomsListController: UITableViewController { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) + + let categoryValue = Array(meetingRooms.values)[indexPath.section] //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) //let categoryValue = orderedMeetingRooms[indexPath.section].1 @@ -68,15 +71,11 @@ class MeetingRoomsListController: UITableViewController { let roomName = orderedCategoryValues[indexPath.row].0 let capacity = orderedCategoryValues[indexPath.row].1 */ - let roomNames = Array(meetingRooms.keys) - let roomNames[indexPath.row] + let roomName = Array(categoryValue.keys)[indexPath.row] + let capacity = Array(categoryValue.values)[indexPath.row] cell.textLabel!.text = roomName - if let capacity: Int = meetingRooms[roomName] - { - cell.detailTextLabel!.text = "\(capacity)" - } - //cell.detailTextLabel!.text = "\(capacity)" + cell.detailTextLabel!.text = "\(capacity)" return cell } From fe3e35bb7e267765a4fd51e78cda6f95855eefbe Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Tue, 31 Oct 2017 01:05:31 +0900 Subject: [PATCH 11/12] chapter 5-7,8 --- .../MeetingRoomsListViewController.swift | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift index 77234e2..8551c53 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift @@ -15,7 +15,7 @@ class MeetingRoomsListController: UITableViewController { var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] func meetingRoomsAtIndex(index:Int) -> (key:String, value:[String:Int]) { - let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) + let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) return orderedMeetingRooms[index] } //Generic @@ -48,31 +48,26 @@ class MeetingRoomsListController: UITableViewController { override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows //return meetingRooms.count - let categoryValues = Array(meetingRooms.values)[section] - let categoryValues.count + //let categoryValues = Array(meetingRooms.values)[section] - //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) //let rowCount = orderedMeetingRooms[section].1.count - //let rowCount = meetingRoomsAtIndex(section).value.count - //return rowCount + let rowCount = meetingRoomsAtIndex(section).value.count + return rowCount } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) - let categoryValue = Array(meetingRooms.values)[indexPath.section] + //let categoryValue = Array(meetingRooms.values)[indexPath.section] - //let orderedMeetingRooms = meetingRooms.sort({$0.1.first!.1 < $1.1.first!.1}) + //let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) //let categoryValue = orderedMeetingRooms[indexPath.section].1 - /*let categoryValue = meetingRoomsAtIndex(indexPath.section).value + let categoryValue = meetingRoomsAtIndex(indexPath.section).value - let orderedCategoryValues = categoryValue.sort({$0.1 < $1.1}) + let orderedCategoryValues = categoryValue.sorted(by: {$0.1 < $1.1}) let roomName = orderedCategoryValues[indexPath.row].0 let capacity = orderedCategoryValues[indexPath.row].1 - */ - let roomName = Array(categoryValue.keys)[indexPath.row] - let capacity = Array(categoryValue.values)[indexPath.row] cell.textLabel!.text = roomName cell.detailTextLabel!.text = "\(capacity)" @@ -82,13 +77,13 @@ class MeetingRoomsListController: UITableViewController { override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - - return Array(meetingRooms.keys)[section] + let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + return meetingRoomsAtIndex(index: section).key } override func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? { - - let rowCount = Array(meetingRooms.values)[section].count + let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) + let rowCount = meetingRoomsAtIndex(index: section).value.count return "\(rowCount) rooms" } From 61871dbe1089248b769860e1f914696b605f3cb0 Mon Sep 17 00:00:00 2001 From: supremewit <31872381+supremewit@users.noreply.github.com> Date: Sun, 5 Nov 2017 00:34:44 +0900 Subject: [PATCH 12/12] Chapter-all --- .../MeetingRoomsListViewController.swift | 181 ------------------ .../ServiceListViewController.swift | 49 ----- .../project.pbxproj | 27 ++- .../contents.xcworkspacedata | 0 .../MeetingRoomsDynamic/AppDelegate.swift | 47 +++-- .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../building_tab.imageset/Contents.json | 0 .../building_tab.imageset/building_tab.png | Bin .../equipment_tab.imageset/Contents.json | 0 .../equipment_tab.imageset/equipment_tab.png | Bin .../location.imageset/Contents.json | 0 .../location.imageset/location.png | Bin .../Base.lproj/LaunchScreen.storyboard | 15 +- .../Base.lproj/Main.storyboard | 7 +- .../BranchListViewController.swift | 21 +- .../MeetingRoomsDynamic/DataCenter.swift | 86 +++++---- .../EquipmentsDefault.plist | 0 .../EquipmentsListViewController.swift | 14 +- .../MeetingRoomsDynamic/Info.plist | 0 .../MeetingRoomsListController.swift | 55 ++++++ .../ReservationListViewController.swift | 8 +- .../ReserveRoomViewController.swift | 31 ++- .../RoomInfoViewController.swift | 9 +- .../ServiceListViewController.swift | 59 ++++++ .../TintColorViewController.swift | 18 +- .../building.png | Bin .../equipment.png | Bin .../location.png | Bin 29 files changed, 276 insertions(+), 351 deletions(-) delete mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift delete mode 100644 SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic.xcodeproj/project.pbxproj (92%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/AppDelegate.swift (64%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/Contents.json (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/location.imageset/Contents.json (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard (64%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Base.lproj/Main.storyboard (99%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/BranchListViewController.swift (73%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/DataCenter.swift (57%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/EquipmentsDefault.plist (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/EquipmentsListViewController.swift (84%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/Info.plist (100%) create mode 100644 SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/MeetingRoomsListController.swift rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/ReservationListViewController.swift (89%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/ReserveRoomViewController.swift (81%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/RoomInfoViewController.swift (96%) create mode 100644 SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ServiceListViewController.swift rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/MeetingRoomsDynamic/TintColorViewController.swift (75%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/building.png (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/equipment.png (100%) rename SampleCodes/{MeetingRoomsDynamic => MeetingRoomsDynamic_sungwook}/location.png (100%) diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift deleted file mode 100644 index 8551c53..0000000 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/MeetingRoomsListViewController.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// MeetingRoomsListController.swift -// MeetingRoomsDynamic -// -// Created by Lingostar on 2016. 3. 13.. -// Copyright © 2016년 CodersHigh. All rights reserved. -// - -import UIKit - - -class MeetingRoomsListController: UITableViewController { - - //var meetingRooms:[String:Int] = ["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10, "Cezanne":20, "Matisse":30, "Renoir":40] - var meetingRooms:[String:[String:Int]] = ["Meeting":["Banksy":4, "Rivera":8, "Kahlo":8, "Picasso":10], "Seminar":["Cezanne":20, "Matisse":30, "Renoir":40]] - - func meetingRoomsAtIndex(index:Int) -> (key:String, value:[String:Int]) { - let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) - return orderedMeetingRooms[index] - } - //Generic - - - override func viewDidLoad() { - super.viewDidLoad() - - // Uncomment the following line to preserve selection between presentations - // self.clearsSelectionOnViewWillAppear = false - - // Uncomment the following line to display an Edit button in the navigation bar for this view controller. - // self.navigationItem.rightBarButtonItem = self.editButtonItem() - - - } - - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. - } - - // MARK: - Table view data source - - override func numberOfSections(in tableView: UITableView) -> Int { - // #warning Incomplete implementation, return the number of sections - return meetingRooms.count - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - // #warning Incomplete implementation, return the number of rows - //return meetingRooms.count - //let categoryValues = Array(meetingRooms.values)[section] - - - //let rowCount = orderedMeetingRooms[section].1.count - let rowCount = meetingRoomsAtIndex(section).value.count - return rowCount - } - - override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) - - //let categoryValue = Array(meetingRooms.values)[indexPath.section] - - //let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) - //let categoryValue = orderedMeetingRooms[indexPath.section].1 - let categoryValue = meetingRoomsAtIndex(indexPath.section).value - - let orderedCategoryValues = categoryValue.sorted(by: {$0.1 < $1.1}) - let roomName = orderedCategoryValues[indexPath.row].0 - let capacity = orderedCategoryValues[indexPath.row].1 - - cell.textLabel!.text = roomName - cell.detailTextLabel!.text = "\(capacity)" - - return cell - } - - - override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { - let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) - return meetingRoomsAtIndex(index: section).key - } - - override func tableView(tableView: UITableView, titleForFooterInSection section: Int) -> String? { - let orderedMeetingRooms = meetingRooms.sorted(by: {$0.1.first!.1 < $1.1.first!.1}) - let rowCount = meetingRoomsAtIndex(index: section).value.count - - return "\(rowCount) rooms" - } - - /* - // Override to support conditional editing of the table view. - override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. - return true - } - */ - - /* - // Override to support editing the table view. - override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { - if editingStyle == .Delete { - // Delete the row from the data source - tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) - } else if editingStyle == .Insert { - // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view - } - } - */ - - /* - // Override to support rearranging the table view. - override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { - - } - */ - - /* - // Override to support conditional rearranging of the table view. - override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { - // Return false if you do not want the item to be re-orderable. - return true - } - */ - - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - // Get the new view controller using segue.destinationViewController. - // Pass the selected object to the new view controller. - } - */ - -} - - */ - - -class MeetingRoomsListController: UITableViewController { - var service:Service? - - override func viewDidLoad() { - self.title = service?.name - } - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - guard let rowCount = service?.item?.count else { - return 0 - } - return rowCount - } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: indexPath) - - guard let meetingRoom = service?.item?[indexPath.row] else { - return cell - } - cell.textLabel?.text = meetingRoom.name - cell.detailTextLabel?.text = String(meetingRoom.capacity) - return cell - } - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == "ReservationSegue" { - guard let destination = segue.destinationViewController as? ReservationListViewController, selectedIndex = self.tableView.indexPathForSelectedRow?.row , meetingRoom = service?.item?[selectedIndex] else { - return - } - destination.meetingRoom = meetingRoom - } - } -} - - diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift b/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift deleted file mode 100644 index 239fb74..0000000 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ServiceListViewController.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// ServiceListViewController.swift -// MeetingRoomsDynamic -// -// Created by Lingostar on 2016. 4. 5.. -// Copyright © 2016년 CodersHigh. All rights reserved. -// - -import UIKit - -class ServiceListViewController: UITableViewController { - - var branch:Branch? - - override func viewDidLoad() { - self.title = branch?.name - } - - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { - - return 1 - } - - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - guard let rowCount = branch?.services?.count else { - return 0 - } - return rowCount - } - - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ServiceCell", forIndexPath: indexPath) - - guard let service = branch?.services?[indexPath.row] else { - return cell - } - cell.textLabel?.text = service.name - return cell - } - - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { - if segue.identifier == "MeetingRoomSegue" { - guard let destination = segue.destinationViewController as? MeetingRoomsListController, selectedIndex = self.tableView.indexPathForSelectedRow?.row , service = branch?.services?[selectedIndex] else { - return - } - destination.service = service - } - } -} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic.xcodeproj/project.pbxproj similarity index 92% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic.xcodeproj/project.pbxproj index 648c48f..07e0649 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.pbxproj +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic.xcodeproj/project.pbxproj @@ -17,7 +17,7 @@ 2C9C276F1C958848002525E4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C276D1C958848002525E4 /* Main.storyboard */; }; 2C9C27711C958849002525E4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27701C958849002525E4 /* Assets.xcassets */; }; 2C9C27741C958849002525E4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C9C27721C958849002525E4 /* LaunchScreen.storyboard */; }; - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */; }; + 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */; }; 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */; }; 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */; }; 2CAA1EF81CB3FA7C0096F3FA /* ServiceListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */; }; @@ -36,7 +36,7 @@ 2C9C27701C958849002525E4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 2C9C27731C958849002525E4 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 2C9C27751C958849002525E4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingRoomsListViewController.swift; sourceTree = ""; }; + 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingRoomsListController.swift; sourceTree = ""; }; 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataCenter.swift; sourceTree = ""; }; 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BranchListViewController.swift; sourceTree = ""; }; 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ServiceListViewController.swift; sourceTree = ""; }; @@ -75,7 +75,7 @@ 2C9C27691C958848002525E4 /* AppDelegate.swift */, 2CAA1EF51CB3FA630096F3FA /* BranchListViewController.swift */, 2CAA1EF71CB3FA7C0096F3FA /* ServiceListViewController.swift */, - 2C9C277B1C9588BE002525E4 /* MeetingRoomsListViewController.swift */, + 2C9C277B1C9588BE002525E4 /* MeetingRoomsListController.swift */, 2CAA1EF31CB3F36D0096F3FA /* DataCenter.swift */, 2C6F670F1CC233F5007EAEC7 /* RoomInfoViewController.swift */, 2C6F67111CC342F3007EAEC7 /* ReservationListViewController.swift */, @@ -118,7 +118,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 0900; ORGANIZATIONNAME = CodersHigh; TargetAttributes = { 2C9C27651C958847002525E4 = { @@ -168,7 +168,7 @@ 2C5B2DAA1CC726B8007D75DD /* EquipmentsListViewController.swift in Sources */, 2C6F67141CC34BDF007EAEC7 /* ReserveRoomViewController.swift in Sources */, 2CAA1EF41CB3F36D0096F3FA /* DataCenter.swift in Sources */, - 2C9C277C1C9588BE002525E4 /* MeetingRoomsListViewController.swift in Sources */, + 2C9C277C1C9588BE002525E4 /* MeetingRoomsListController.swift in Sources */, 2CAA1EF61CB3FA630096F3FA /* BranchListViewController.swift in Sources */, 2C9C276A1C958848002525E4 /* AppDelegate.swift in Sources */, 2C6F67101CC233F5007EAEC7 /* RoomInfoViewController.swift in Sources */, @@ -206,13 +206,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -251,13 +259,21 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 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_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_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -276,6 +292,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/AppDelegate.swift similarity index 64% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/AppDelegate.swift index 4eb8359..f7c9d17 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/AppDelegate.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/AppDelegate.swift @@ -10,46 +10,51 @@ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { - + var window: UIWindow? - - - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + + + private func application( application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - return true } - - func applicationWillResignActive(application: UIApplication) { + + internal 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game. + // 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) { + + 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. dataCenter.save() + } - - func applicationWillEnterForeground(application: UIApplication) { - // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. + + 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) { + + 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. - let userDefaultColor = UserDefaults.standardUserDefaults().integerForKey(TintColorKey) + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) guard let defaultColor = TintColor(rawValue: userDefaultColor)?.color else { return } - applyTintColor(defaultColor) + applyTintColor(color: defaultColor) + + + } - - func applicationWillTerminate(application: UIApplication) { + + func applicationWillTerminate(_ application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + dataCenter.save() + } - - + + } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/Contents.json b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/Contents.json similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/Contents.json rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/Contents.json diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/Contents.json diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/building_tab.imageset/building_tab.png diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/Contents.json diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/equipment_tab.imageset/equipment_tab.png diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/Contents.json b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/location.imageset/Contents.json similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/Contents.json rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/location.imageset/Contents.json diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Assets.xcassets/location.imageset/location.png diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard similarity index 64% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard index 2e721e1..c3cb57d 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,11 @@ - - + + + + + - + + @@ -13,10 +17,9 @@ - + - - + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/Main.storyboard similarity index 99% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/Main.storyboard index d99a303..551d9d0 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Base.lproj/Main.storyboard +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Base.lproj/Main.storyboard @@ -22,7 +22,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -295,7 +295,7 @@ - + @@ -679,6 +679,7 @@ + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/BranchListViewController.swift similarity index 73% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/BranchListViewController.swift index f8613e7..265b52e 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/BranchListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/BranchListViewController.swift @@ -11,8 +11,13 @@ import UIKit class BranchListViewController: UITableViewController { override func viewDidLoad() { + super.viewDidLoad() self.title = "지점" } + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } override func numberOfSections(in tableView: UITableView) -> Int { @@ -25,7 +30,7 @@ class BranchListViewController: UITableViewController { return rowCount } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "BranchCell", for: indexPath as IndexPath) let branch = dataCenter.branches[indexPath.row] @@ -47,26 +52,26 @@ class BranchListViewController: UITableViewController { } */ - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ServiceSegue" { - guard let destination = segue.destinationViewController as? ServiceListViewController, selectedIndex = self.tableView.indexPathForSelectedRow?.row else { + guard let destination = segue.destination as? ServiceListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row else { return } destination.branch = dataCenter.branches[selectedIndex] as Branch } } - @IBAction func locationTurnOn(sender: AnyObject) { + @IBAction func locationTurnOn(_ sender: Any) { - let locationAlert = UIAlertController(title: "위치 정보 요청", message: "위치 정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다. 또는 지도앱에서 지점의 위치 정보를 제공해 드립니다. 선택하신 기능이 계속 제공됩니다. 환경설정에서 제공되는 기능을 변경할 수 있습니다.", preferredStyle: .ActionSheet) - let locationAction = UIAlertAction(title: "위치정보 켜기", style: .Default, handler: { (action:UIAlertAction) -> Void in + let locationAlert = UIAlertController(title: "위치 정보 요청", message: "위치 정보를 기반으로 가까운 지점을 자동으로 선택할 수 있습니다. 또는 지도앱에서 지점의 위치 정보를 제공해 드립니다. 선택하신 기능이 계속 제공됩니다. 환경설정에서 제공되는 기능을 변경할 수 있습니다.", preferredStyle: .actionSheet) + let locationAction = UIAlertAction(title: "위치정보 켜기", style: UIAlertActionStyle.default, handler: { (action:UIAlertAction) -> Void in print ("위치정보 켜기 선택") }) - let openMapAction = UIAlertAction(title: "지도앱에서 열기", style: .Default, handler: { (action:UIAlertAction) -> Void in + let openMapAction = UIAlertAction(title: "지도앱에서 열기", style: .default, handler: { (action:UIAlertAction) -> Void in print ("지도앱에서 열기 선택") }) locationAlert.addAction(locationAction) locationAlert.addAction(openMapAction) - self.presentViewController(locationAlert, animated: true, completion: nil) + self.present(locationAlert, animated: true, completion: nil) } } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/DataCenter.swift similarity index 57% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/DataCenter.swift index a547081..032a739 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/DataCenter.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/DataCenter.swift @@ -15,14 +15,14 @@ class DataCenter { var branches:[Branch] = [] var filePath:String { get{ - let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! + let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! return documentDirectory + fileName }} init() { - if NSFileManager.defaultManager().fileExistsAtPath(self.filePath) { + if FileManager.default.fileExists(atPath: self.filePath) { //read - if let unarchArray = NSKeyedUnarchiver.unarchiveObjectWithFile(self.filePath) as? [Branch] { + if let unarchArray = NSKeyedUnarchiver.unarchiveObject(withFile: self.filePath) as? [Branch] { branches += unarchArray } } else { @@ -31,9 +31,16 @@ class DataCenter { } + } - func defaultData() -> Array { + func save() { + NSKeyedArchiver.archiveRootObject(self.branches, toFile: self.filePath) + + + } + + func defaultData() -> [Branch] { let banksyRoom = MeetingRoom(name: "Banksy", capacity: 4) let kahloRoom = MeetingRoom(name: "Kahlo", capacity: 8) let riveraRoom = MeetingRoom(name: "Rivera", capacity: 8) @@ -44,7 +51,7 @@ class DataCenter { let meetingRoomService = Service(name: "회의실예약") let visitorService = Service(name: "방문자예약") let deskService = Service(name: "데스크예약") - meetingRoomService.item = [banksyRoom, kahloRoom, riveraRoom, picassoRoom] + meetingRoomService.items = [banksyRoom, kahloRoom, riveraRoom, picassoRoom] let pangyoBranch = Branch(name: "판교점") let samsungBranch = Branch(name: "삼성점") @@ -54,13 +61,10 @@ class DataCenter { let anamBranch = Branch(name: "안암점") pangyoBranch.services = [vehicleService, meetingRoomService, visitorService, deskService] - let branchArray = [samsungBranch, pangyoBranch, yeoksamBranch, sinrimBranch, songdoBranch, anamBranch] + let branchArray = [pangyoBranch, samsungBranch, yeoksamBranch, sinrimBranch, songdoBranch, anamBranch] return branchArray } - func save(){ - NSKeyedArchiver.archiveRootObject(self.branches, toFile: self.filePath) - } } @@ -73,39 +77,43 @@ class Branch:NSObject, NSCoding { } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.services = aDecoder.decodeObjectForKey("services") as? [Service] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.services = aDecoder.decodeObject(forKey: "services") as? [Service] } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeObject(self.services, forKey: "services") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey:"name") + aCoder.encode(self.services, forKey:"services") + } } class Service:NSObject, NSCoding { let name:String - var item:[MeetingRoom]? + var items:[MeetingRoom]? - init (name:String){ + init(name:String) { self.name = name } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.item = aDecoder.decodeObjectForKey("item") as? [MeetingRoom] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.items = aDecoder.decodeObject(forKey: "items") as? [MeetingRoom] + } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeObject(self.item, forKey: "item") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey:"name") + aCoder.encode(self.items, forKey:"items") + } } class MeetingRoom:NSObject, NSCoding { + let name:String let capacity:Int var reservations:[Reservation]? @@ -116,15 +124,15 @@ class MeetingRoom:NSObject, NSCoding { } required init?(coder aDecoder: NSCoder) { - self.name = aDecoder.decodeObjectForKey("name") as! String - self.capacity = aDecoder.decodeIntegerForKey("capacity") - self.reservations = aDecoder.decodeObjectForKey("reservations") as? [Reservation] + self.name = aDecoder.decodeObject(forKey: "name") as! String + self.capacity = aDecoder.decodeInteger(forKey: "capacity") + self.reservations = aDecoder.decodeObject(forKey: "reservations") as? [Reservation] } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.name, forKey: "name") - aCoder.encodeInteger(self.capacity, forKey: "capacity") - aCoder.encodeObject(self.reservations, forKey: "reservations") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.name, forKey: "name") + aCoder.encode(self.capacity, forKey: "capacity") + aCoder.encode(self.reservations, forKey: "reservations") } } @@ -147,19 +155,19 @@ class Reservation:NSObject, NSCoding { required init?(coder aDecoder: NSCoder) { - self.hostName = aDecoder.decodeObjectForKey("hostName") as! String - self.date = aDecoder.decodeObjectForKey("date") as! NSDate - self.attendees = aDecoder.decodeIntegerForKey("attendees") - self.equipments = aDecoder.decodeObjectForKey("equipments") as! [String] - self.catering = aDecoder.decodeBoolForKey("catering") + self.hostName = aDecoder.decodeObject(forKey: "hostName") as! String + self.date = aDecoder.decodeObject(forKey: "date") as! NSDate + self.attendees = aDecoder.decodeInteger(forKey: "attendees") + self.equipments = aDecoder.decodeObject(forKey: "equipments") as! [String] + self.catering = aDecoder.decodeBool(forKey: "catering") } - func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.hostName, forKey: "hostName") - aCoder.encodeObject(self.date, forKey: "date") - aCoder.encodeInteger(self.attendees, forKey: "attendees") - aCoder.encodeObject(self.equipments, forKey: "equipments") - aCoder.encodeBool(self.catering, forKey: "catering") + func encode(with aCoder: NSCoder) { + aCoder.encode(self.hostName, forKey: "hostName") + aCoder.encode(self.date, forKey: "date") + aCoder.encode(self.attendees, forKey: "attendees") + aCoder.encode(self.equipments, forKey: "equipments") + aCoder.encode(self.catering, forKey: "catering") } } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsDefault.plist b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/EquipmentsDefault.plist similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsDefault.plist rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/EquipmentsDefault.plist diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/EquipmentsListViewController.swift similarity index 84% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/EquipmentsListViewController.swift index b7dc7ce..a48bedb 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/EquipmentsListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/EquipmentsListViewController.swift @@ -11,7 +11,7 @@ import UIKit let EquipmentFileName = "EquipmentsDefault" class EquipmentsListViewController: UITableViewController { - var equipments:Array = [] + var equipments:Array = [] override func viewDidLoad() { super.viewDidLoad() @@ -22,11 +22,11 @@ class EquipmentsListViewController: UITableViewController { // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem() - guard let equipmentURL = NSBundle.mainBundle().URLForResource(EquipmentFileName, withExtension: "plist") else { + guard let equipmentURL = Bundle.main.url(forResource: EquipmentFileName, withExtension: "plist") else { print("No File") return } - if let equipmentsArray = NSArray(contentsOfURL: equipmentURL){ + if let equipmentsArray = NSArray(contentsOf: equipmentURL){ print(equipmentsArray) equipments += Array(equipmentsArray) } @@ -40,18 +40,18 @@ class EquipmentsListViewController: UITableViewController { // MARK: - Table view data source - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return equipments.count } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("EquipmentCell", forIndexPath: indexPath) + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "EquipmentCell", for: indexPath) guard let equipment = equipments[indexPath.row] as? [String:AnyObject] else { return cell diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Info.plist similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/Info.plist rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/Info.plist diff --git a/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/MeetingRoomsListController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/MeetingRoomsListController.swift new file mode 100644 index 0000000..0c9cb65 --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/MeetingRoomsListController.swift @@ -0,0 +1,55 @@ +// +// MeetingRoomsListController.swift +// MeetingRoomsDynamic +// +// Created by Lingostar on 2016. 3. 13.. +// Copyright © 2016년 CodersHigh. All rights reserved. +// + +import UIKit + +class MeetingRoomsListController: UITableViewController { + var service:Service? + + override func viewDidLoad() { + self.title = service?.name + } + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + override func numberOfSections(in tableView: UITableView) -> Int { + + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let rowCount = service?.items?.count else { + return 0 + } + return rowCount + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) + + guard let meetingRoom = service?.items?[indexPath.row] else { + return cell + } + cell.textLabel?.text = meetingRoom.name + cell.detailTextLabel?.text = String(meetingRoom.capacity) + return cell + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == "ReservationSegue" { + guard let destination = segue.destination as? ReservationListViewController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row, let meetingRoom = service?.items?[selectedIndex] else { + return + } + destination.meetingRoom = meetingRoom + } + } +} + + diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReservationListViewController.swift similarity index 89% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReservationListViewController.swift index 12b6314..dc293bd 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReservationListViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReservationListViewController.swift @@ -44,11 +44,11 @@ class ReservationListViewController: UITableViewController { // MARK: - Table view data source - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + override func numberOfSections(in tableView: UITableView) -> Int { return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { guard let rowCount = meetingRoom?.reservations?.count else { return 0 } @@ -56,8 +56,8 @@ class ReservationListViewController: UITableViewController { } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCellWithIdentifier("ReservationCell", forIndexPath: indexPath) + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ReservationCell", for: indexPath) guard let reservation = meetingRoom?.reservations?[indexPath.row] else { return cell diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReserveRoomViewController.swift similarity index 81% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReserveRoomViewController.swift index 49483ea..8db75e1 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/ReserveRoomViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ReserveRoomViewController.swift @@ -38,37 +38,36 @@ class ReserveRoomViewController: UITableViewController { // Dispose of any resources that can be recreated. } - @IBAction func makeReservation(sender: AnyObject) { + @IBAction func makeReservation(_ sender: Any) { guard let reservation = makeReservation() else { - self.dismissViewControllerAnimated(true, completion: { + self.dismiss(animated: true, completion: { }) return } switch self.presentingViewController { case let tabBarC as UITabBarController: - if let navigationC = tabBarC.selectedViewController as? UINavigationController, reservationListVC = navigationC.topViewController as? ReservationListViewController { - reservationListVC.addNewItem(reservation) + if let navigationC = tabBarC.selectedViewController as? UINavigationController, let reservationListVC = navigationC.topViewController as? ReservationListViewController { + reservationListVC.addNewItem(reservation: reservation) } case let navigationC as UINavigationController: if let reservationListVC = navigationC.topViewController as? ReservationListViewController { - reservationListVC.addNewItem(reservation) + reservationListVC.addNewItem(reservation: reservation) } case let reservationListVC as ReservationListViewController: - reservationListVC.addNewItem(reservation) + reservationListVC.addNewItem(reservation: reservation) default: print("Cannot find ReservationListViewController") break } - self.dismissViewControllerAnimated(true, completion: { - }) + self.dismiss(animated: true, completion: {}) } - @IBAction func cancelReservation(sender: AnyObject) { - self.dismissViewControllerAnimated(true, completion: nil) + @IBAction func cancelReservation(sender: Any) { + self.dismiss(animated: true, completion: nil) } @@ -136,12 +135,12 @@ class ReserveRoomViewController: UITableViewController { // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ReserveDone" { - guard let newReservation = makeReservation(), reservationListVC = segue.destinationViewController as? ReservationListViewController else { + guard let newReservation = makeReservation(), let reservationListVC = segue.destination as? ReservationListViewController else { return } - reservationListVC.addNewItem(newReservation) + reservationListVC.addNewItem(reservation: newReservation) } } @@ -152,11 +151,11 @@ class ReserveRoomViewController: UITableViewController { return nil } newReservation.hostName = host - newReservation.date = datePicker.date - if let equipmentArray = equipmentsField.text?.characters.split(",").map(String.init) { + newReservation.date = datePicker.date as NSDate + if let equipmentArray = equipmentsField.text?.characters.split(separator: ",").map(String.init) { newReservation.equipments = equipmentArray } - newReservation.catering = cateringSwitch.on + newReservation.catering = cateringSwitch.isOn return newReservation } } diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/RoomInfoViewController.swift similarity index 96% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/RoomInfoViewController.swift index c9c33b9..1c31af7 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/RoomInfoViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/RoomInfoViewController.swift @@ -26,8 +26,11 @@ class RoomInfoViewController: UITableViewController { // Dispose of any resources that can be recreated. } - @IBAction func dismissModal(sender: AnyObject) { - self.dismissViewControllerAnimated(true, completion: nil) + @IBAction func modalDismiss(_ sender: Any) { + self.dismiss(animated: true, completion: nil) + } + + } // MARK: - Table view data source @@ -97,4 +100,4 @@ class RoomInfoViewController: UITableViewController { } */ -} + diff --git a/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ServiceListViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ServiceListViewController.swift new file mode 100644 index 0000000..a977827 --- /dev/null +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/ServiceListViewController.swift @@ -0,0 +1,59 @@ +// +// ServiceListViewController.swift +// MeetingRoomsDynamic +// +// Created by Lingostar on 2016. 4. 5.. +// Copyright © 2016년 CodersHigh. All rights reserved. +// + +import UIKit + +class ServiceListViewController: UITableViewController { + + var branch:Branch? + + override func viewDidLoad() { + super.viewDidLoad() + self.title = branch?.name + self.navigationItem.title = "\(branch!.name) 정보" + self.navigationController?.isToolbarHidden = false + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + // MARK: - Table view data source + + override func numberOfSections(in tableView: UITableView) -> Int { + + return 1 + } + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + guard let rowCount = branch?.services?.count else { + return 0 + } + return rowCount + } + + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "ServiceCell", for: indexPath) + + guard let service = branch?.services?[indexPath.row] else { + return cell + } + cell.textLabel?.text = service.name + return cell + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + if segue.identifier == "MeetingRoomSegue" { + guard let destination = segue.destination as? MeetingRoomsListController, let selectedIndex = self.tableView.indexPathForSelectedRow?.row , let service = branch?.services?[selectedIndex] else { + return + } + destination.service = service + } + } +} diff --git a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/TintColorViewController.swift similarity index 75% rename from SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift rename to SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/TintColorViewController.swift index bead065..16a4672 100644 --- a/SampleCodes/MeetingRoomsDynamic/MeetingRoomsDynamic/TintColorViewController.swift +++ b/SampleCodes/MeetingRoomsDynamic_sungwook/MeetingRoomsDynamic/TintColorViewController.swift @@ -14,20 +14,20 @@ enum TintColor:Int { var color:UIColor {get{ switch self { case .Blue: - return UIColor.blueColor() + return UIColor.blue case .Red: - return UIColor.redColor() + return UIColor.red case .Green: - return UIColor.greenColor() + return UIColor.green case .Purple: - return UIColor.purpleColor() + return UIColor.purple } }} } let TintColorKey = "TintColor" func applyTintColor(color:UIColor){ - guard let window = UIApplication.sharedApplication().keyWindow else { + guard let window = UIApplication.shared.keyWindow else { return } window.tintColor = color @@ -42,7 +42,7 @@ class TintColorViewController: UIViewController { // Do any additional setup after loading the view. - let userDefaultColor = NSUserDefaults.standardUserDefaults().integerForKey(TintColorKey) + let userDefaultColor = UserDefaults.standard.integer(forKey: TintColorKey) self.tintColorSegment.selectedSegmentIndex = userDefaultColor } @@ -51,13 +51,13 @@ class TintColorViewController: UIViewController { // Dispose of any resources that can be recreated. } - @IBAction func tintColorChanged(sender: AnyObject) { + @IBAction func tintColorChanged(_ sender: Any) { let selectedIndex = self.tintColorSegment.selectedSegmentIndex - NSUserDefaults.standardUserDefaults().setInteger(selectedIndex, forKey: TintColorKey) + UserDefaults.standard.set(selectedIndex, forKey: TintColorKey) guard let changedColor = TintColor(rawValue: selectedIndex)?.color else { return } - applyTintColor(changedColor) + applyTintColor(color: changedColor) } diff --git a/SampleCodes/MeetingRoomsDynamic/building.png b/SampleCodes/MeetingRoomsDynamic_sungwook/building.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/building.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/building.png diff --git a/SampleCodes/MeetingRoomsDynamic/equipment.png b/SampleCodes/MeetingRoomsDynamic_sungwook/equipment.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/equipment.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/equipment.png diff --git a/SampleCodes/MeetingRoomsDynamic/location.png b/SampleCodes/MeetingRoomsDynamic_sungwook/location.png similarity index 100% rename from SampleCodes/MeetingRoomsDynamic/location.png rename to SampleCodes/MeetingRoomsDynamic_sungwook/location.png