iOS/Swift 40

[IOS] 이벤트 관찰 NotificationCener

APPLE_공식문서 약간 react의 redux에서 subscribe 같은 느낌을 받았습니다. 미리 NotificationCenter에 특정 이벤트를 지정해두고 이에 맞는 이벤트가 발생하면 그를 수행할 수 있게 해줍니다. 예시 A viewController에서 알림을 등록하고 B ViewController에서 알림을 구독하면 이벤트가 발생했을때 B에서 이를 인식해 selector가 실행됩니다. 알림(이벤트) 등록 NotificationCenter.default.post( // 센터에서 사용할 이름 name: NSNotification.Name("이벤트 이름"), // 전달할 객체 object: 이벤트에서 사용할 객체라고 보면 된다., // 연관되어 넘겨줄 값 dictionary userInfo: ["키"..

iOS/Swift 2022.02.07

[IOS] UserDefaults 로컬 저장소에 저장 및 불러오기

UserDefaults는 Key와 Value로 이루어져 있습니다. (리액트에서 리덕스와 비슷한 느낌으로 사용 가능할듯 싶습니다.) 아니면 웹 브라우저의 LocalStorage와 비슷한 느낌이기도 하네요. 저장할 데이터 만들고 받아오기 -> 저장할 데이터는 내 마음대로 할 수 없음으로 encoding 해주거나 원하는 데이터 형식으로 바꿔주는작업이 필요합니다. (iOS는 왜 데이터를 그냥 쓰게 못 두는거야ㅜㅜ 장점이자 단점이네요) 암튼.. encoding을 다뤄보고 저장에서는 decoding을 해 보도록 하겠습니다. (do-catch 문 생략) 저장 - propertyListEncoder() 이용 // 저장할 데이터의 struct가 다음과 같은 예시라고 가정 struct exampleStruct: codab..

iOS/Swift 2022.02.03

[Swift] error 종류 만들기와 catch

import UIKit // 에러 처리 예제 // 에러 종류 정하기 enum exError: Error { // 발생할 에러 종류 case unknown case exErrorOne(e:Int) case exErrorTwo(e: Int) } // 에러 던지기 //throw exError.exErrorOne(e: 40) // 에러 처리 1 // 함수에서 발생한 오류 해당 함수에 전파하는 경우 func checkError(e: Int) throws -> String{ guard e != -1 else{throw exError.unknown} guard e >= 30 else{throw exError.exErrorTwo(e: 30)} return "아무 오류도 발생하지 않음" } // do-catch 사용법 ..

iOS/Swift 2022.01.31

[Swift]난수 생성과 범위 설정

Int로 랜덤을 뽑아내는 방법은 간단합니다. Int의 메소드를 사용하면 됩니다. Int.random(int: (1...10)) // 1~10 난수를 리턴 다른 방법으로 이용하는 함수는 다음과 같습니다. arc4random_uniform( ) 다음 코드과 같이 arc4random_uniform( ) 을 이용해 생성이 가능한데 원하는 난수의 수를 넣어주시면 됩니다. let random = Int(arc4random_uniform(10)) // 0~9 사이의 난수 생성 만약 여기서 범위를 설정하고 싶다면 수를 더해 원하는 범위를 만들 수 있습니다. let random = Int (arc4random_uniform(10)) + 1 // 1~10 난수 생성

iOS/Swift 2022.01.30

Xcode 단축키

Vscode 단축키가 그대로 호환이 되었다면 좋겠지만 아쉬운 대로 기존에 쓰던 필요한 단축키를 어느 정도 정리 중입니다. 프리뷰 및 해제 Command + option + Enter Command + Enter -> 단일 창으로 들여 쓰기 자동 ctrl + I 콘솔(디버거 창) 오픈 Command + Shift + c 같은 단어 선택 Option + control + e 위 것 전체 선택 버전 Command + ctrl + e 왼쪽 창 제어 Command 숫자 왼쪽 창 제어 Command option 숫자 줄 수직 수평 이동 Command + option [ ] -> alt 방향키 옵션을 제외 좌우 이동 여러 커서 Shift + control + click

iOS/Swift 2022.01.30

[Swift] 고차함수 map, filter, reduce

자바 스크립트에서 유용하게 사용했던 문법들 입니다. 스위프트에서도 비슷하게 사용 가능합니다. // 고차함수 // map, filter, reduce let a: [Int] = [1,2,3,4,5] var doubleA: [Int] = [] // map에는 클로저를 넣는다. doubleA = a.map({(number: Int)-> Int in return number * 2 }) print(doubleA) // 축약법 //doubleA = a.map{ $0 * 2} // filter // return 값이 True인 값만 반환 // reduce // 컨테이너 내부의 콘텐츠를 하나로 통합 let numbers: [Int] = [10,20,30] let sum: Int = numbers.reduce(0, {..

iOS/Swift 2022.01.25

[Swift] extension 익스텐션

// 익스텐션 // 타입에 새로운 기능을 추가할 수 있는 기능 //extension 확장할 타입 { //} //extension String: 프로토콜1,프로토콜2,프로토콜3 { // //} // 예시 extension Int { var isEven: Bool { return self % 2 == 0 } var isOdd: Bool { return self % 2 == 1 } } print(1.isEven) print(2.isEven) // 메서드 추가 예시 extension Int { func multiply(by n: Int) -> Int { return self * n } } print(3.multiply(by: 3)) // 생성자 추가 예시 extension String { init(intType..

iOS/Swift 2022.01.25

[Swift] 프로토콜 protocol

// 프로토콜 // protocol 프로토콜 이름 { // 정의 //} import CoreGraphics // 프로토콜을 채용하면 해당 조건을 지켜줘야 한다. protocol a { // 프로퍼티는 항상 var로 요구 // get은 익기만 가능해도 됨 // get set은 읽기 쓰기 모두 가능해야 함 var topic: String { get set } var language: String{ get } // 메서드 요구 // 구현은 안해도 됨 func talk() // 생성자 요구 init(topic: String, language: String) } // 프로토콜 채택 struct Person: a { var topic: String let language: String // var subject: ..

iOS/Swift 2022.01.25

[Swift] assert 와 guard

// assert, guard // 값 확인에 사용 // assert // 디버깅 모드에서만 작동 var a: Int = 0 // 맞으면 지나감 아니면 출력하고 중지 assert(a == 0, "someInt != 0") a = 1 //assert(a == 0, "someInt != 0") // guard 는 빠른 종료를 위한 구문 // if else로 구현하는 것과 비슷 // 예시 var count: Int = 1 while true{ guard count < 3 else{ break } print(count) count += 1 } // 딕셔너리에서 유용 // 참고로 딕셔너리에서 꺼내오는 값은 항상 옵셔널(값이 없을 수도 있으니까) func exFunc(info: [String: Any]){ // i..

iOS/Swift 2022.01.25