본문 바로가기

swift83

입력 방법 및 자주 사용되는 functions 입력 받기 기본 readLine()으로 입력 받음. readLine()은 Optional(String) 타입 1. String 입력 받기 let myString = readLine()! //입력이 확실한 경우 강제 언래핑 사용. 2. Int 입력 받기 let myInt = Int(readLine()!)! // Int 이니셜라이저도 Optional(Int)를 반환하므로 언래핑 필요 3. 공백으로 구분되는 입력 받기 let stringsWithBlanks = readLine()! let stringArray: [String] = stringsWithBlanks.split(separator: " ") let intsWithBlanks = readLine()! let intArray: [Int] = intsWi.. 2023. 11. 25.
pod install 시 진행이 더뎠던 문제 지난번 좋은 사이드 메뉴 라이브러리 중 하나인 https://github.com/jonkykong/SideMenu 를 사용해 보려고 먼저 Example을 확인하기 위해 프로젝트 Clone을 하였음. Cocoapods를 사용하고 있는 프로젝트였기에, pod install을 진행해 준 상황에서, 특정 부분에서 진행이 막히는 문제가 있었음. 최하단에 "Cloning spec repo..." 부분인데, CocoaPodds/Specs가 무엇인지 찾아보니 stackoverflow 에 "Cocoapods will add that source by default if no other source is present. By adding your own source Cocoapods assumes everything ca.. 2023. 11. 15.
JSON 동일한 key에 다른 type의 value가 있는 경우 인코딩/디코딩 하기 JSON parsing을 하다보면, key의 이름은 동일한데 서로 다른 타입의 값을 가진 데이터들을 파싱해야할 때가 있습니다. 예를 들어서, "value"라는 key인데 하나는 int값을 가지고 다른 하나는 string값을 가집니다. // Int 타입인 경우 { "value": 1 } // String 타입인 경우 { "value": "hat" } 이러한 경우에는 Xcode에 에러가 보통 "typeMismatch"로 아래와 같이 나올 것입니다. typeMismatch( Swift.String, Swift.DecodingError.Context( codingPath: [ CodingKeys(stringValue: "ownedNfts", intValue: nil), _JSONKey(stringValue: ".. 2023. 11. 12.
ActivityKit으로 Dynamic Island 만들어보기! 1. Widget Extension 추가하기 1) App project를 생성해 준 다음, File -> New -> Target 선택. 2) widget extension을 검색해서 타겟을 추가해준다. 3) Info.plist에 Supports Live Activities를 추가하고 YES로 value를 설정해준다. 주의: SwiftUI 프로젝트에는 navigation panel에 info.plist가 안보이므로, Targets에 들어가서 수정해주면 된다. 2. ActivityAttributes 모델 생성 1. Swift 파일로 ActivityAttributes를 conform하는 struct를 하나 만들어 준다. 주의: ActivityAttributes는 Target Membership에 앱과 위젯 .. 2023. 10. 21.
Property Wrapper 알아보기 @가 붙어있는 애노테이션을 Swift에서는 Property Wrapper라고 부릅니다. Property wrapper 변수에 접근하는 방법은 세 가지가 있는데, 각각의 차이점에 대해서 알아보려고 합니다. 예를 들어서, myName이라는 변수에 @Binding Property wrapper를 붙여주겠습니다. @Binding var myName: String 이제 myName이라는 변수에 접근할 때, 1. self.myName 2. self._myName (wrapped value) 3. self.$myName (projected value) 이렇게 세 가지 방식으로 접근이 가능합니다. 첫번째 방식은, Binding 자체에 접근할 수 있게 해줍니다. @Binding은 structure형태 입니다. 그렇기 때.. 2023. 10. 3.
JSONSerialization 사용방법 JSONSerialization 이란? JSON과 그에 동등한 Foundation 객체 간 변환을 가능하게 해주는 객체. (JSON에서 Foundation에서 지원하는 타입의 객체로 혹은 그 반대로 변환되도록 해준다는 의미) Methods 1. JSON에서 Foundation 객체로 변환 시 class func jsonObject(with: Data, options: JSONSerialization.ReadingOptions) -> Any 2. Foundation 객체에서 JSON으로 변환 시 class func data(withJSONObject: Any, options: JSONSerialization.WritingOptions) -> Data 3. JSON으로 변환이 가능한 객체인지 확인 시 cla.. 2023. 9. 30.
반응형