swift
-
[iOS교육] XCode가 생성한 파일 삭제 방법Programming/Swift(iOS) 2023. 5. 4. 09:31
XCode가 자동 생성한 파일을 제거하는 방법 #1 1) 자동 생성된 파일 제거 .swift 파일 3개 AppDelegate, SeceneDelegate, ViewController storyboard 파일 2개 Main, LaunchScreen 2) info에서 "Application Scene Manifest" 제거 3) 프로젝트 설정에서 아래 2개 항목 값을 제거(공백상태) Main Interface Launch screen File emulator로 실행시켜보면, 앱이 실행되었다가 바로 사라짐 XCode가 자동 생성한 파일을 제거하는 방법 #2 1) 자동 생성된 파일 제거 .swift 파일 3개 SeceneDelegate, ViewController storyboard 파일 2개 Main, Lau..
-
Swift 화면간 데이터 전달Programming/Swift(iOS) 2021. 9. 7. 12:24
Swift에서 화면 전환간 데이터 전달하는 방법 1. ViewController를 찾아 직접 전달 (A->B로 전달) ViewController가 가진 변수에 직접 data를 전달 @IBAction func tapCodePresentButton(_ sender: Any) { guard let viewController = self.storyboard?.instantiateViewController(identifier: "CodePresentViewController") as? CodePresentViewController else { return} viewController.name = "Honggggggg" viewController.modalPresentationStyle = .fullScreen v..
-
Swift 화면 전환 방법Programming/Swift(iOS) 2021. 9. 7. 11:42
아이폰 화면 구성 StackView로 쌓아올리는 방법 Push로 현재 ViewController위에 새로운 화면을 쌓고 Pop으로 현재 ViewController를 없애, 이전 화면으로 돌아간다. 화면 전환 방법 소스코드를 통해서 전환하는 방식 StoryBoard를 통해 전환하는 방식 ViewController의 View위에 다른 View를 가져와 바꿔치기 ViewController에서 새로운 ViewController 호출하기 NavigationController를 이용하여 화면전환 SegueWay를 사용하여 화면 전환 예제 1 - 소스코드상에서 present와 dismiss 이용 mainViewController에서 secondViewController를 호출하는 경우 secondViewControl..
-
Swift Generic - 3Programming/Swift(iOS) 2021. 4. 6. 21:28
String 배열의 빈도수를 세는 프로그램을 짜 봅시다. hash로 빈도수를 세면 될것 같은데요..(python이면 collections의 defaultdict를 사용하겠지만..) let arr = [ "hello", "world", "hello", "world", "hello", "world", "show", "me", ] func printValues(_ values: [String]) { print(values.sorted()) var result = [String: Int]() for e in values { //result[e]가 존재하지 않으면 0, 존재하면 값 가져오는 부분 let v = result[e] ?? 0 result[e] = v + 1 } print(result) } 만약 Stri..
-
Swift Generic - 2Programming/Swift(iOS) 2021. 4. 6. 14:50
배열 sort함수를 예로 들어보죠. sort는 배열 안에 담긴 객체 타입이 어떤것이냐에 따라서 다른데요. Int, Float, String등 시스템에서 제공하는 기본타입은 sorted가 됩니다. 하지만 사용자가 구현한 객체 타입은 되지 않습니다. 이유는 기본 타입의 경우에는 'Comparable' Protocol을 미리 준수했기 때문입니다. 사용자가 만든 객체의 경우에도 동일하게 'Comparable' Protocol을 준수하면 가능합니다. 갑자기 제너릭 하다가 프로토콜로 빠져버렸는데요. sorted는 타입에 따라서 모두 제공을 하기 때문에 제너릭으로 구현되어 있습니다. 원형을 찾아보면 Self.Element로 되어 있습니다. @inlinable public func sorted() -> [Self.El..
-
Swift Generic - 1Programming/Swift(iOS) 2021. 4. 6. 14:05
모든 객체 지향 언어에는 Generic이라는 개념이 존재합니다. 제너릭을 지원하므로써, 동일한 로직이 갖고 있는 함수에 대해서 중복을 제거할 수 있습니다. 한번만 만들면되고, 아직 작성되지 않는 다양한 타입에 대해서도 대응이 가능합니다. 또한, 제너릭을 사용하므로써 Any 타입이 아니기때문에 실행시간에 다운 캐스트와 같은 불필요한 동작도 필요하지 않습니다. 오버로딩은 함수를 중복으로 구현하고, 전달인자를 다르게 하는것이고, 제너릭은 하나의 함수를 다양한 타입이 지원가능하도록 만드는 것입니다. Generic의 구현 방식 1) 컴파일러가 코드를 생성하는 방식 => C++, C#, Swift : 타입 안정성 뿐만 아니라, '컴파일 타임 다형성'을 구현하는 것이 가능하다. 2) Any Type으로 생성하고, 컴..
-
Swift 오류처리 -3Programming/Swift(iOS) 2021. 4. 6. 13:10
Error처리를 한 군데에서 하면 중복된 코드를 방지할 수 있어 가독성을 높일 수 있습니다. Singleton - 'default' => swift에 default keyword가 지정되어 있어 quota로 다르다는것을 표시 - shared : private로 제한을 걸어 생성을 불가능하게 한다. struct ErrorHandler { static let `default` = ErrorHandler() func handle(_ error:Error) { print(error) } } 타입을 생성할 때, Data의 유효성을 미리 검증해 볼 수 있다면 이후의 오류 처리를 줄일 수 있습니다. 에러 원인이 2개 이상일 경우 오류 처리를 하는 것이 좋고, 단일이라면 Optional 처리를 하는것이 편리합니다. 1..
-
Swift 오류처리 - 3Programming/Swift(iOS) 2021. 4. 6. 11:22
Objective - C의 전통적인 에러 처리인 'NSError'를 이용한 방법입니다. NSError를 extension으로 구현 한 뒤에, 각 종 처리를 추가해주면 됩니다. enum ApiError: Error { case network(String) case client(String) case server } struct User { let login: String let company: String } extension ApiError { var nsError: NSError { return NSError(apiError: self) } } func getGithubUser(login: String) throws -> User { if login == "root" { // throw ApiError..