야곰의 Swift 기초 강의를 보고 정리한 자료입니다.
1강 이름짓기, 콘솔로그, 문자열 보간법
import Swift
let age: Int = 10
"안녕하세요! 저는 \(age)살입니다"
"안녕하세요! 저는 \(age + 5)살입니다"
print("안녕하세요! 저는 \(age + 5)살입니다")
print("\n##################\n");
class Person {
var name: String = "hyun"
var age: Int = 10
}
let hyun: Person = Person()
print(hyun) //
print("\n###########\n")
dump(hyun) // class의 모든 값들을 출력
c 하다 보니까 개짱천재다 야호
2강 상수와 변수
import Swift
let 상수 선언 키워드
var 변수 선언 키워드
let 이름: 타입 = 값
var 이름: 타입 = 값
값의 타입이 명확하다면, 타입 생략이 가능하다
let 이름 = 값
var 이름 = 값
let constant : String = "차후에 변경이 불가능한 상수 let"
var variable : String = "차후에 변경이 가능한 변수 var"
variable = "변수는 이렇게 값 변경 가넝한"
//constant = "얘는 변경하려 하면 오류 발생"
let sum: Int // 일단 타입만 할당해놓고
let inputA: Int = 100
let inputB: Int = 200
sum = inputA + inputB // 최초 한 번만 지정해줄 수 있다.
// sum = 1 이러면 오류!
var nickName: String
nickName: "hyun"
nickName: "애옹" // 얜 variable이니까 몇번을 할당해도 노상관
당연한 얘기지만 할당되지 않은, 초기화되지 않은 값을 print하려 하면 오류가 난다.
주의!
Swift는 space도 민감하게 반응한다. 확인 잘하기~
3강 기본 데이터 타입
import UIKit
//Bool, Int, UInt, Flat, Double, Character, String
//Bool
var someBllo: Bool = true
someBool = false // true, false만 들어갈 수 있다!
//someBool = 0
//someBool = 1
0, 1을 넣으면 참 거짓을 자동 판별하는게 아니고, 왜 정수형 타입을 넣냐고 오류 뜸.
//Int
var someInt: Int = -100
//someInt = 100.1 정수형이니까 실수 안됨~ double로 표현해라
//UInt unsigned int
var someUInt: UInt = 100
//someUInt = -100 양수만 들어와~
//someUInt = someInt 이래도 음수니까 안됨
//Float
var someFloat: Float = 3.14 //부동소수형 타입, 32비트 기준
someFloat = 3
//Double
var someDouble: Double = 3.14 //부동소수형 타입, 64비트
someDouble = 3
//someDouble = someFloat 얘도 오류 뜸
//Character
var someCharacter: Character = "😀" // 유니코드를 사용한다!
someCharacter = "👭"
someCharacter = "A"
someCharacter = "야"
//someCharacter = "안녕" 안돼~~
//String
var someString: String = "야오오😀"
someString = someStriing + "반가워옹"
print(someString) // 야오오😀 반가워옹
문자열을 여러 개 이용할 때
someString = """
세 개씩 쓰고, 줄바꿈 꼭!
여러개를
쓸수있따
야오
"""
someString = someCharacter 이거도 수용 안해줌 데박 ㅠ
var someInt: Int = 100
var someFloat: Float
var someDouble: Double
someFloat = someInt // 가넝한
// someDouble = someFloat 얘는 오류뜬대요
예시에서 같은 3이 들어가는데도, Int형을 Float에 넣는 것은 가능했지만, Float를 Double에 넣는 부분은 에러가 떴다. 차이가 뭘까?
var someFloat: Float = 1.2345678910
var someDouble: Double = 1.2345678910
printf("Float값은 : \(someFloat), Double값은 : \(someDouble)")
결과값
Float값은 : 1.23456789, Double값은 : 1.234567891
보이듯, Float는 9에서 짤리고, Double은 다 보여준다!
임의의 수 만들기도 추가됐다고 헙니다 데박 정수, 실수 모두 가능
random(in:)
Int.random(int: -100...100)
UInt.random(in: 1...30)
Float.random(in: -0.64...-1.4)
Float와 Double 모두 부동 소수점을 사용하는 실수이다. 우리가 흔히 소수점 이 있는 실수라고 부르기도 하는데, Float는 32비트 부동 소수, Double은 64비트 부동 소수이다.
32비트와 64비트의 차이는 몇자리수까지 표현하는가에서 다르다는 점을 볼 수 있다.
64비트 환경에서 Float는 십진수를 6자리 숫자까지만, Double은 15자리까지 표현할 수 있다! 데박..
그래서 왜 안되냐면..
var someInt: Int = 1
var someDouble: Double = 1.0
// vat someSum = someInt + someDouble
여기부터 틀린다. Swift가 얼마나 안정성을 추구하는지.... 라고 생각해도 될까 ㅎㅎ;
그냥 마음 편하게 데이터 타입에 엄격하다!!
데이터 타입 교환이 거의 안된다고 생각하고 코드를 작성하자.
4강 Any, AnyObject, nil
Any - Swift의 모든 타입을 지칭하는 키워드.
AnyObject - Swift의 모든 클래스 타입을 지칭하는 프로토콜.
nil - 없음을 의미하는 키워드.
//MARK -Any
var someAny: Any = 100
someAny = "어떤 타입도 다 된대!!!"
someAny = 42.4242
//let someDouble: Double = someAny 근데 이건 안된대 데박..역시 자료형 교환에는 폐쇄적인듯
//MARK -AnyObject
class SomeClass {}
var someAnyObject: AnyObject = someClass()
//someAnyObject = 1233.12
//이건 class instance가 아닌 double 값이 들어가서 오류.
//MARK: -nil
//someAny = nil
//someAnyObject = nil
nil은 어느 값도 없다는거니까, 어떤 타입이든 들어올 수 있지만,
없는 값을 집어넣을 수는 없는거니까. null과 유사!
5강 컬렉션 타입 (Array, Dictionary, Set)
Array - 순서가 있는 리스트 컬렉션
Dictionary - 키와 값의 쌍으로 이루어진 컬렉션
Set - 순서가 없고, 멤버가 유일한 컬렉션
//MARK: - Array
var integers: Array<Int> = Array<Int>() // []
integers.append(1) // [1] 요소를 맨 뒤에 추가하는 methods
integers.append(100) // [1, 100]
//integers.append(101.1) Int 타입이 아니니까 오류.
integers.contains(100) //true 포함하고 있는지 판단하는 bool type
integers.contains(99) // false
integers.remove(at:0) // 1 index 위치를 선택
integers.removeLast() // 100 맨 마지막 요소를 제거
integers.removeAll() // [] 모든 멤버를 삭제
integers.count // 0 갯수 세줘~
//integers[0] 비어있는 배열의 0번째 요소로 접근하려 하니까 오류가 발생하고, 강제종료.
//Array<Double>과 [Double]은 동일한 표현.
//빈 Double Array 생성
var doubles: Array<Double> = [Double]() // 괄호가 있어야 생성!
var strings: [String] = [String]()
//[]는 새로운 빈 Array
var characters: [Character] = [] // 동일한 표현들
//let을 사용하여 Array를 선언하면 불변 Array
// append, remove 등등 다 불가능.
let immutableArray = [1, 2, 3]
//MARK: -Dictionary
// Key가 String 타입, Value가 Any인 빈 Dictionary 생성!
var anyDictionary: Dictionary<String, Any> = [String: Any]() // [:]
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100
anyDictionary // ["someKey: "value", "anotherKey": 100]
anyDictionary["someKey"] = "dictionary"
anyDictionary // ["someKey": "dictionary", "anotherKey": 100]
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil
anyDictionary // [:]
let emptyDictionary: [String: String] = [:]
let initializedDictionary: [String: String] = ["name": "hyun", "gender": "female"]
//let someValue: String = initializedDictionary["name"]
// 오류가 나는 이유는 dictionary에 있는 name의 값이 있을 수도, 없을 수도 있기 때문. 불확실성
//MARK: -Set 중복값 없음을 보장.
var integerSet: Set<Int> = Set<Int>()
integerSet.insert(1)
integerSet.insert(100)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99)
integerSet // {100, 99, 1}
integerSet.contains(1) // true
integerSet.contains(2) // false
integerSet.remove(100) // 100 지워
integerSet.removeFirst() // 99 지워
integerSet.count // 1
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]
let union: Set<Int> = setA.union(setB) // {2, 4, 5, 6, 7, 3, 1} // union 두 집합을 합쳐
let sortedUnion: [Int] = union.sorted() // [1, 2, 3, 4, 5, 6, 7] 같은 타입의 Array로 변환이 된다1!!
let intersection: Set<Int> = setA.intersection(setB) // {5, 3, 4} 교집합
let subtraction: Set<Int> = setA.subtraction(SetB) // {2, 1} 차집합