전체 글 67

[Swift] 제어 흐름 (Control Flow)

Swift 에서는 다양한 제어 흐름이 있다. 여러번 작업을 수행하는 while, 조건에 따라 다르게 실행되는 if, guard, switch 구문과 코드에서 실행 플로우를 전달하는 break, continue 가 있다. 또한 반복을 쉽게 만들어주는 for-in, 현재 범위를 벗어날 때 수행되는 코드인 defer 가 있다. For-In 루프 (For-In Loops) 연속된 것에 대해 for-in 루프를 사용하여 반복할 수 있다. let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { print("Hello, \(name)!") } // Hello, Anna! // Hello, Alex! // Hello, Brian! // Hello, Jack..

[Swift] 콜렉션 타입 (Collection Types)

Swift 에서 배열(array), 집합(set), 딕셔너리(dictionary)를 사용하여 데이터를 어떻게 구성하는지 알아보자. 이를 콜렉션 타입이라 부른다. 배열은 순서를 가지고 있고, 집합은 반복되지 않은 값에 순서가 없다. 딕셔너리는 키-값 쌍의 순서가 없는 콜렉션 타입이다. 배열만 순서를 가지고 있다! 배열을 지정해줄때 타입을 명확하게 지정해줘야 한다. 콜렉션의 가변성 (Mutablility of Collections) 배열, 집합, 딕셔너리는 변경이 가능하다. 변수로 생성된 후에 추가하거나 삭제, 수정이 가능하다. 물론 상수로 선언해 주면 변경이 불가능하다. Note: 콜렉션을 변경할 필요가 없다면 상수로 선언해 주는 것이 좋다. Swift 컴파일러가 생성한 콜렉션의 성능을 최적화할 수 있다...

[SwiftUI] 커스텀 버튼 만들기

보통 앱을 만들다 보면 버튼들이 많이 생긴다. 버튼을 만들고 여러 가지 세부설정들을 붙이지만 그 버튼이 많이 쓰일 경우 색이나 크기, 모서리값을 미리 설정해 놓으면 편하다. 어떻게 커스텀 버튼을 만드는지 간단하게 알아보자. 더 편하고 좋은 방법이 나오면 업데이트 예정이다. 아래와 같은 방법으로 CustomButton 이라는 구조체를 만든 후 label, disable, action 만 입력하면 자동적으로 아래와 같은 버튼을 간단하게 만들어 줄 수 있다. import SwiftUI struct ContentView: View { var body: some View { VStack { CustomButton(label: "Custom Button", disable: false) { // action } } ..

[Swift] 문자열과 문자 (Strings and Characters)

Swift 에서는 텍스트를 어떻게 저장하고 다루는지 알아보자. String 은 "hello, world" 나 "albatross" 같은 문자의 연속이다. Note : Swift의 String 타입은 Foundation 의 NSString 클래스와 연결되어 있다. 문자열 (String Literals) 상수 또는 변수의 초기값으로 문자열을 사용할 수 있다. 문자열은 쌍따옴표 ( " ) 로 둘러싸인 문자의 연속이다. let someString = "Some string literal value" Swift 에서는 자동으로 someString 상수를 String 타입으로 추론한다. 여러 줄 문자열 리터럴 (Multiline String Literals) 여러 줄의 문자열이 필요하면 3개의 큰따옴표를 사용해 주..

[Swift] 기본연산자 (Basic Operators)

기본 연산자는 코딩을 하면서 거의 기본 중에 기본이라고 볼 수 있다. 과연 Swift는 다른 언어와 어떠한 점이 같고, 어떠한 점이 다를까? Swift에서 기본 연산자란 대입, 연산, 비교를 수행한다. 값을 변경, 확인, 결합하기 위해서 사용한다. 예를 들면 + 는 두 숫자를 더하게 되고 AND 연산자 (&&)는 두 Boolean값을 결합하게 된다. 용어 (Terminology) 연산자는 단항, 이항, 삼항으로 나눌 수 있다. 단항의 경우 -a 처럼 단일 항목에 적용된다. !b, c! 처럼 말이다. 이항의 경우 2 + 3 처럼 2개의 항목에 동작하고 2개의 항목 사이에 위치한다. 삼항의 경우 Swift는 하나의 삼항 연산자인 조건 연산자만 있고 a ? b : c 형태로 이루어진다. 연산자 (operato..

[SwiftUI] 커스텀 ColorSet 을 Asset 에 추가하기

앱을 만들다 보면 색상을 지정해 줘야 할 때가 있다. 다양한 방법이 있지만 그중에 아예 Asset 에 New Color Set 을 추가하여 색상을 만들어 줄 수 있다. 추가 방법 아래와 같이 Asset 에 들어가서 New Color Set 을 추가해준다. 직접 Color Panel 에 들어가서 색을 지정해 줄 수 있고, Hex 코드나 RGB 값으로도 입력이 가능하다. 이렇게 색을 추가하고 아래의 코드를 추가해 주면 된다. extension을 사용하여 Color 구조체에 static let 을 사용하여 정적 멤버를 추가해준다. extension Color { static let myColor1 = Color("myColor1") static let myColor2 = Color("myColor2") } 이..

[Swift] 구조체와 클래스 (Structures and Classes)

프로그램을 구성하는 데 있어서 구조체와 클래스 (Structures and Classes) 는 필수 요소이다. 속성과 방법을 정의하게 된다. 스위프트에서는 구조체와 클래스를 정의하기만 하면 자동으로 사용할 수 있게 된다고 한다. Note : 인스턴스 (instance) 라는 단어가 자주 등장하는데 인스턴스가 도대체 뭘까? 클래스나 구조체, 열거형에서 생성된 것 (Object) 를 이야기한다. 하지만 Swift에서는 구조체 또는 클래스가 기능에 가깝기 때문에 인스턴스 (instance) 라는 용어를 사용한다고 한다. 아래 처럼 상수 human1 을 인스턴스라고 부른다. let human1 = Human(name: "Tyler", age: 30) 구조체와 클래스의 비교 (Comparing Structures..

[SwiftUI] Claymorphism CardView 구현

Claymorphism 기본 카드뷰와 Claymorphism스타일의 카드의 차이는 이러하다. 마치 점토의 형상을 띄고 있고, 좀 더 둥글둥글하게 표현된다. SwiftUI로 Claymorphism구현 우선 Claymorphism 을 구현하기 위해서는 기본 Shadow, inner Shadow 가 필요하고, 이 Shadow 들을 자연스럽게 나타내기 위해 Blur 처리하는 것도 중요하다. SwiftUI 에는 모든 기능이 다 있다! Blur 기능은 radius 로 어느 정도 조절이 가능했다. 우선 내가 코드로 구현한 Claymorphism 스타일의 카드뷰이다. import SwiftUI struct ContentView: View { var body: some View { ZStack { VStack { Tex..

[SwiftUI] @State 알아보기

SwiftUI를 쓰다 보면 @State를 변수 선언할 때 자주 쓰게 된다. 그렇다면 이 @State는 뭘까? 결론부터 이야기하자면 Property wrapper라고 한다. 속성을 감싼다고? 이게 무슨 뜻이지 또? Property wrapper? @State var number: Int = 0 SwiftUI에서는 변수를 선언할 때 아래와 같이 선언을 하게 된다. number는 var 키워드를 사용하여 변수(variable)로 선언되었고, Int 데이터 타입(data type)을 가지며, 초기값으로 0을 가진다. 그리고 @State는 number라는 속성(property)을 상태(State)로 감싸(wrapping) 준다. Swift에서 속성(property)은 클래스(class), 구조체(struct), ..

[SwiftUI] SwiftUI 기본 구성 ContentView

Playground나 Xcode로 SwiftUI파일을 만들게 된다면 처음으로 보게 되는 화면이 있을 것이다. 바로 아래와 같은 화면이다. struct ContentView: View { var body: some View { Text("Hello, World!") } } 항상 그냥 지나치지만 과연 이 코드들? 뭘까? 간단하게 뜯어보도록 하겠다. struct ContentView: View struct 키워드를 사용하여 구조체를 선언하고, ContentView라는 이름을 가지며, View 프로토콜을 따르는 타입이다. 벌써부터 복잡해진다. 구조체? 프로토콜? ContentView라는 이름을 가진다는 것 밖에 이해를 못 하겠다. 구조체 선언? 구조체란 Swift에서 데이터 타입을 정의하는 방법이다. struc..