본문 바로가기

프로그래밍/SWIFT

(32)
XCode 프로젝트에 써드파티 패키지 추가하기 처음하다 보니까 라이브러리 가져다가 쓰는 것도 어려웠다. 라이브러리의 소개페이지에 설치해서 사용하는 방법들이 너무 여러가지를 기준으로 설명이 되어 있었다. swift package manager, cocoapods, carthage... 모두 커맨드라인에서 어떻게 하는 방법인데, 나는 xcode 프로젝트에 포함해서 쓰고 싶었다. 프로젝트 설정 쪽에 package 관리하는 곳이 있었고, package 추가하면 창이 뜨고 쭉 하면 되더라. 간단한 건데, 혹시 나처럼 헤맬 사람들을 위해 캡쳐화면을 떠서 포스팅을 작성한다. xcode 13 이다.
Swift XMLCoder swift 로 xml 을 파싱하는 예제를 검색했을 때 (한국어검색결과에서) 가장 많이 나왔던 것은 XMLParser, XMLParserDelegate 을 사용하는 예제였다. 시작태그, 끝태그, 바디 각각을 처리하는 3개의 parser 를 구현해야 하는 것인데, 너무 리던던트한 코드가 많고, 구현도 복잡했다. 그러다가, json 은 이미 Codable, Decodable 프로토콜을 이용하여 간단하게 파싱하는 방법을 제공( JSONDecoder )하고 있다는 걸 알았다. 그래서, swift xml parser codable protocol 같은 검색어로 검색해 봤더니 XMLCoder 라는 써드파티 라이브러리가 존재한다는 걸 알았고, 써봤다. 일단 아주 잘 정의된 xml 에 예제만 해 봤는데, 너무 좋은 것 ..
SwiftUI : Primes Numbers 아주 간단하게 최초 100개의 소수를 구하는 swiftui 프로그램. 최초에 2 이상인 100개의 정수가 화면에 나열됨. 각 숫자 버튼을 누르면, 누른 숫자의 배수들을 제거함. 2부터 하나씩 버튼을 눌르면, 남아있는 숫자들이 소수들. import SwiftUI struct ContentView: View { @State private var primes = Array(2...30000) @State private var clicked = Set() var body: some View { VStack { ForEach(0..
100DaysOfSwiftUI - Day 24 마지막 과제가 아래와 같다. 커스텀 ViewModifier (와 View extension) 을 만드는데, 글씨체를 크고 푸른색으로 만들어 프로미넌트타이틀에 적당하게 바꾸는 모디파이어. Create a custom ViewModifier (and accompanying View extension) that makes a view have a large, blue font suitable for prominent titles in a view. 작성한 코드는 아래와 같다. import SwiftUI struct ProminentTitle : ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle.bold()) ...
100DaysOfSwiftUI - Day 23 스위프트UI의 뷰는 class 가 아닌 struct 이다. 단순하다. 클래스 구조는 기본 클래스에도 자주 사용되지 않는 수많은 프로퍼티들이 달려있고, 이 기본 클래스를 상속받는 모든 뷰들도 이들을 다 가지고 있다. 스위프트UI의 뷰에 모디파이어가 붙으면, 이전에 만들어진 뷰에 대해 수정된 뷰가 된다. struct ContentView: View { var body: some View { Button("Hello") { print(type(of: self.body)) } .padding() .frame(width: 300, height: 100) .background(.yellow) } } 단순한 버튼에, padding, frame, background 3개의 모디파이어가 붙어 모양이 변경된 뷰. 클릭 이..
100DaysOfSwiftUI 16 17 18 19 20 Proj1 - I 22-07-01 Proj1 - II 22-07-02 Proj1 - III 22-07-02 Challenge - unit cnv 22-07-03 Proj2 - I - zstack - gradient - button - alert 22-07-05 21 22 23 24 25 Proj2 - II - Guess the Flag 22-07-05 Proj2 - III - wrapup - review 22-07-07 Proj3 - I - Views - Modifier 22-07-09 Proj3 - II - wrapup - review 22-07-09 Proj1~3 - 가위바위보 22-07-18 26 27 28 29 30 Proj4 - I - Stepper - Date - C..
100DaysOfSwiftUI - Day 16 WeSplit 첫번째 프로젝트 var body: some View { } 는 swift 문법적으로는 computed property 인 것 같다. @State 를 추가하여, immutable 프로퍼티를 변경이 가능하도록 만들어준다. struct 가 아닌 다른 어느 곳에 저장한다고 하는데... 어딜까. @State 를 추가하지 않고, 버튼핸들러에서 프로퍼티를 변경하려 하면, View 가 immutable 이기 때문에 에러메시지가 발생하는 걸 보여주는 설명이 참 좋았다. 안그랬으면 그냥 그런갑다 하고 넘어갔을 것. https://daewonyoon.tistory.com/440
[Swift] error: ambiguous use of 'split(separator:maxSplits:omittingEmptySubsequences:)' 너무 간단한 코드를 짜는데, 너무 이상한 에러가 발생했다. 코드가 풀려고 하는 문제는 문자열을 단어별로 분리해서, 가장 짧은 단어의 길이를 찾는 것이다. 빈칸이 포함된 어느정도 길이의 문자열이 인자로 주어지고, 빈칸으로 단어가 나누어진다. 푸는 알고리즘은 간단하다 주어진 문자열을 빈칸으로 나누어 ( spllit 메소드 ) 단어의 시퀀스로 만든다 시퀀스의 각 단어의 길이를 .count 로 구한다. 이를 매핑해서 단어길이의 시퀀스로 변환한다. 단어길이의 시퀀스에서 가장 작은 것을 .min() 으로 구한다. 코드를 보면 한줄로 끝이 난다. (아래 코드는 가독성을 위해 줄바꿈을 추가.) func find_short(_ str: String) -> Int { return str.split(separator: " ..