Explanation
개인적으로 작은 변화가 생기기도 했고, 이전부터 하고 싶었던 것을 하기 위하여!
앞으로(당분간? 아마도?) 스위프트를 사용해서 MacOS의 애플리케이션을 공부하며 만들어보려 합니다!
오늘은 그 첫번째 시간으로, Swift 기초! 문법?을 알아보려 합니다!
Swift도 Xcode도 처음이라 잘못된 내용이 굉장히 많을 수 있습니다.
1. Swift
사실 대부분의 언어가 비슷하듯, 저에게 그나마 익숙한 자바스크립트와도 크게 다르지 않았지만
그래도 가볍게 한번 살펴볼까요?
// typescript
// 변수
var a: string = 'a'
let b: string = 'b'
// 상수
const c: string = 'c'
// swift
// 변수
var a: String = "a"
// 상수
let c: String = "c"
// typescript
// 숫자
const a: number = 30
const b: number = 10.0
const c: number = 10.0
// 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살까지 표기할 수 있겠네요!
// typescript
// 배열
const a: string[] = ['a', 'b', 'c']
// swift
// 배열
const a: [String] = ["a", "b", "c"]
// typescript
// 딕셔너리
const a: {[key: string]: string}[] = [{ aaa: 'aaa' }]
// swift
// 딕셔너리
const a: [String: String] = ["aaa": "aaa"]
// typescript
// 값 없음
let a = null
// swift
// 값 없음
var a = nil
정확하게는 nil은 null과 다르다고 해요. 스펠링도 다르...
(하지만 왕초보에게 그 정도의 차이는 중요하지 않습니다.)
하지만 또 그냥 이렇게 넘기기에는 너무 성의없어 보일 수 있기 때문에,
https://seolhee2750.tistory.com/10
위 포스트가 아주 간단 명료하게 설명해주신 거 같아요!
null = 포인터가 가리키는 객체가 존재하지 않음
nil = 특정 타입에 대한 값의 부재
// swift
import Foundation
let str1 = "123a"
let str2 = "123"
print(Int(str1) == nil ? 0 : 1) // 0
print(Int(str2) == nil ? 0 : 1) // 1
// swift
// 옵셔널
var a: String?
a = "a"
print(a) // Optional("a")
해당 변수에 값이 있을 수도 있고 없을 수도 있다는 것 말하고, 해당 값을 사용할때는 저 옵셔널 껍대기를 벗겨야 하는 거 같아요.
// swift
// 옵셔널
var a: String?
a = "a"
print(a) // Optional("a")
if let b = a {
print(b) // 'a'
}
이 부분은 직접 뭔가 개발을 해보면서 익혀야 할 거 같아요. 아직 어색하네요..
// typescript
// 조건문
const a: number = 2
const b: number = 1
if(a > b) {
cosnole.log('true')
}
// swift
// 조건문
let a: Int = 2
ler b: Int = 1
if a > b {
print("true")
}
// 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
// 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
조건문 반복문도 크게 다르지 않고, 괄호만 사용하지 않는 정도의 느낌이네요!
// typescript
// 함수
function a(b: string): string {
return b
}
// 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
오 함수는 조금 많이 다른 느낌이에요.
아규먼트를 호출하는 쪽과 동작하는 쪽의 이름을 다르게 쓸 수 있다는 점도 꽤나 매력적인 거 같아요.



