Swift

· iOS
문제 API 호출을 하려고 하는데 문제 없는 URL String을 URL 객체로 변환하니까 자꾸 nil이 반환되는 문제가 있었다. 저번에는 됐는데 왜 된거지 암튼 검색해보니 주소에 한글이나 스페이스 등이 들어갈 때 nil이 될 수 있다고 한다. 역 이름 인자로 한글이 들어가기 때문에 이런 문제가 생겼던 것 같다. 해결 ➡️ 인코딩을 해주면 해결할 수 있다. .addingPercentEncoding을 사용하면 인자로 지정된 CharacterSet에 명시되어 있지 않은 모든 Characters를 백분율로 인코딩된 문자로 바꿔준 뒤, String? 값으로 반환해준다. let encodedURL = arrivalUrl.addingPercentEncoding(withAllowedCharacters: .urlQue..
· iOS
AppDelegate.swift : 앱의 실행 주기(Life Cycle)를 관리SceneDelegate.swift : 사용자 인터페이스(User Interface)의 실행 주기(Life Cycle)를 관리ViewController.swift : 화면에 보이는 뷰에서 처리하는 내용의 스위프트 코드 소스를 담고 있는 클래스 파일 (뷰 하나당 클래스 하나 대응)Main.storyboard : 앱의 내용을 시각적으로 쉽게 프로그래밍 할 수 있도록 해주는 파일Assets.xcassets : 앱의 아이콘을 보관하는 저장소LaunchScreen.storyboard : 앱이 실행될 때 잠시 나타나는 스플래시 화면의 스토리보드Info.plist : 앱이 실행되는 데 필요한 정보를 저장하고 있는 파일
· iOS
Xcode를 사용한 iOS 개발 중 API KEY를 숨기는 방법에 대해 알아보자 네이버 영화 API를 사용하기 위해 발급받은 2개의 KEY값을 숨겨보겠다. X-Naver-Client-Id X-Naver-Client-Secret 1. Xcode -> New File -> Property List 파일 생성해주기 2. 생성된 plist 파일에 String 타입의 key를 만들어주고, value에는 값을 넣어준다. .gitignore에 해당 plist 파일을 세팅해주고 push를 하고 나면 처음에 들어간 임의의 값이 들어간 상태까지만 추적을 하기 때문에 먼저 임의의 value 값을 넣어준다. 이 때, value에 실제 키값을 바로 넣어주어도 상관은 없는데, 이 때는 .gitignore에 해당 plist 파일을..
· Swift
익스텐션(Extension)은 스위프트의 강력한 기능 중 하나로, 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다. 익스텐션으로 추가할 수 있는 기능은 다음과 같다. (기존에 존재하는 기능의 재정의는 불가) 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션 정의 문법 extension 확장할 타입 이름 { 타입에 추가될 새로운 기능 구현 } 또한 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도..
· Swift
프로토콜(Protocol)은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의한다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted)함으로써 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '프로토콜을 준수한다(Conform)'고 표현한다. 프로토콜의 요구사항을 충족시키기 위해서는 프로토콜이 제시하는 기능을 모두 구현해주어야 한다. 즉, 프로토콜은 정의와 제시만 할 뿐이지 스스로 기능을 구현하지는 않는다. 특정 타입의 인스턴스를 만들어서 사용하려는 사람 입장에서는 프로토콜을 통해 해당 타입이 수행할 수 있는 기능들에 대해 명확하게 알 수 있고, 컴파일러 또한 이를 쉽게 파악할 수 있도록 해준다...
· Swift
assert와 guard 애플리케이션이 동작 중에 생성하는 다양한 결과값을 동적으로 확인하고, 빠르고 안전하게 처리할 수 있도록 해준다. /* Assertion */ var someInt: Int = 0 assert(someInt == 0, "someInt != 0") // 조건이 맞기 때문에 지나침 someInt = 1 //assert(someInt == 0) // 동작 중지, 검증 실패 //assert(someInt == 0, "someInt != 0") // 메세지 지정한 경우 func functionWithAssert(age: Int?) { assert(age != nil, "age == nil") assert((age! >= 0) && (age! = 0 else { // 기술한 조건과 맞지 않으..
· Swift
스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 클래스의 인스턴스를 부모/자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 로 사용된다. 키워드로는 is, as 를 사용한다. 기존의 다른 언어들에서는 다음과 같은 식으로 타입캐스팅을 해준다. let someInt: Int = 100 let someDouble: Double = Double(someInt) 하지만 스위프트에서 이렇게 하는 것은 타입캐스팅이 아니고, 그냥 인스턴스를 하나 더 생성하게 되는 것이다. 실습 코드 /* -------------------- 타입캐스팅을 위한 클래스 정의 -------------------- */ class Person { var name: String = "" func breath() { print("숨..
· Swift
[ 옵셔널 체이닝 ] 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또다시 옵셔널이 연속적으로 연결되는 경우 연쇄적으로 프로퍼티를 불러올 수 있도록 해 준다. 아래와 같이 사람과 아파트를 의미하는 2개의 클래스를 정의하고, 2명의 사람과 1개의 아파트 인스턴스를 생성해주었다. class Person { var name: String var job: String? var home: Apartment? // 집 (옵셔널) init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: Person? // 경비원 (옵셔널) var owner: Person?..
· Swift
스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. 따라서 저장 프로퍼티를 정의할때는 무조건 기본값을 할당해주어야 한다. 기본값 할당된 인스턴스 생성 이후, 프로퍼티 값 할당해주는 경우 class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } let jason: PersonA = PersonA() jason.name = "jason" jason.age = 30 jason.nickName = "j" 하지만 위와 같이 기본값이 정해져있으면, 무조건 기본값으로 기본값 초기화를 한 번 거친 다음 프로퍼티를 할당해주어야 하..
· Swift
프로퍼티는 크게 다음과 같이 종류를 나눠줄 수 있다. 저장 프로퍼티 (stored property) 연산 프로퍼티 (computed property) 타입 프로퍼티 (type property) 프로퍼티 예시 코드 // 프로퍼티 struct Student { // 인스턴스 저장 프로퍼티 var name: String = "" var `class`: String = "Swift" var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티 var westernAge: Int { get { // 값 꺼내오기 return koreanAge - 1 } set(inputValue) { // 값 저장 koreanAge = inputValue + 1 } } // 타입 저장 프로퍼티 static var type..
kybeen
'Swift' 태그의 글 목록