react-stack : 하이브리드 앱의 웹뷰 또는 모바일 웹에서 화면 레이어 스택 구성을 도와주는 라이브러리입니다.
Swift로 MacOS 애플리케이션 만들기 #1 Swift 기초
2023-12-05
Explanation
개인적으로 작은 변화가 생기기도 했고, 이전부터 하고 싶었던 것을 하기 위하여!
앞으로(당분간? 아마도?) 스위프트를 사용해서 MacOS의 애플리케이션을 공부하며 만들어보려 합니다!
오늘은 그 첫번째 시간으로, Swift 기초! 문법?을 알아보려 합니다!
Swift도 Xcode도 처음이라 잘못된 내용이 굉장히 많을 수 있습니다.
사실 대부분의 언어가 비슷하듯, 저에게 그나마 익숙한 자바스크립트와도 크게 다르지 않았지만
그래도 가볍게 한번 살펴볼까요?
1 2 3 4 5 6 |
// typescript // 변수 var a: string = 'a' let b: string = 'b' // 상수 const c: string = 'c' |
1 2 3 4 5 |
// swift // 변수 var a: String = "a" // 상수 let c: String = "c" |
1 2 3 4 5 |
// typescript // 숫자 const a: number = 30 const b: number = 10.0 const c: number = 10.0 |
1 2 3 4 5 6 7 |
// swift // 숫자 let a: Int = 30 let b: Float = 10.0 let c: Double = 10.0 // Float - 32bit 부동 소수점 // Double - 64bit 부동 소수점 |
‘나는 왕초보니까 그냥 정수는 Int 실수는 Double 쓸꺼다!’라고 적으려고 했는데,
(자바스크립트에서 number도 64bit 부동 소수점이니까)
생각해보니까 이게 또 자바스크립트에는 없던 메모리 야무지게 쓰는 맛이니까, 필요로하는 데이터 크기에 따라 써주면 더 좋을 거 같아요!
위에 저렇게 Int, Float, Double 3개만 적었는데 사실 더 많아요.
Int8, Int16, Int32, Int64, UInt, Uint8, … 등등..
만약에 나이를 담은 변수라면? 나이는 음수가 없으니까 UInt를 사용하고 UInt8을 사용하면,
2의 8승이 256 이니까, 0살 ~ 255살까지 표기할 수 있겠네요!
1 2 3 |
// typescript // 배열 const a: string[] = ['a', 'b', 'c'] |
1 2 3 |
// swift // 배열 const a: [String] = ["a", "b", "c"] |
1 2 3 |
// typescript // 딕셔너리 const a: {[key: string]: string}[] = [{ aaa: 'aaa' }] |
1 2 3 |
// swift // 딕셔너리 const a: [String: String] = ["aaa": "aaa"] |
1 2 3 |
// typescript // 값 없음 let a = null |
1 2 3 |
// swift // 값 없음 var a = nil |
정확하게는 nil은 null과 다르다고 해요. 스펠링도 다르…
(하지만 왕초보에게 그 정도의 차이는 중요하지 않습니다.)
하지만 또 그냥 이렇게 넘기기에는 너무 성의없어 보일 수 있기 때문에,
https://seolhee2750.tistory.com/10
위 포스트가 아주 간단 명료하게 설명해주신 거 같아요!
null = 포인터가 가리키는 객체가 존재하지 않음
nil = 특정 타입에 대한 값의 부재
1 2 3 4 5 6 7 8 |
// swift import Foundation let str1 = "123a" let str2 = "123" print(Int(str1) == nil ? 0 : 1) // 0 print(Int(str2) == nil ? 0 : 1) // 1 |
1 2 3 4 5 |
// swift // 옵셔널 var a: String? a = "a" print(a) // Optional("a") |
해당 변수에 값이 있을 수도 있고 없을 수도 있다는 것 말하고, 해당 값을 사용할때는 저 옵셔널 껍대기를 벗겨야 하는 거 같아요.
1 2 3 4 5 6 7 8 9 |
// swift // 옵셔널 var a: String? a = "a" print(a) // Optional("a") if let b = a { print(b) // 'a' } |
이 부분은 직접 뭔가 개발을 해보면서 익혀야 할 거 같아요. 아직 어색하네요..
1 2 3 4 5 6 7 |
// typescript // 조건문 const a: number = 2 const b: number = 1 if(a > b) { cosnole.log('true') } |
1 2 3 4 5 6 7 |
// swift // 조건문 let a: Int = 2 ler b: Int = 1 if a > b { print("true") } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// typescript // 반복문(for in) const a = [1, 2, 3] for(d in a) { console.log(a[d]) } // 1 // 2 // 3 // 반복문(while) let b = 1 while (b < 4) { console.log(b) b += 1 } // 1 // 2 // 3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// swift // 반복문(for in) let a: [Int] = [1, 2, 3] for d in a { print(d) } // 1 // 2 // 3 // 반복문(while) var b = 1 while b < 4 { print(b) } // 1 // 2 // 3 |
조건문 반복문도 크게 다르지 않고, 괄호만 사용하지 않는 정도의 느낌이네요!
1 2 3 4 5 |
// typescript // 함수 function a(b: string): string { return b } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// swift // 함수 func a(b: String) -> String { return b } let result = a(b: "aaa") print(result) // aaa func b(aaa bbb: String) -> String { return bbb } let result2 = b(aaa: "aaa") print(result) // aaa |
오 함수는 조금 많이 다른 느낌이에요.
아규먼트를 호출하는 쪽과 동작하는 쪽의 이름을 다르게 쓸 수 있다는 점도 꽤나 매력적인 거 같아요.