ios 개발자가 되고 싶어서 유튜브를 잦아보던 중 패스트캠퍼스에서 진행하는 ios입문 강의를 알게되어 신청하여 듣고 있다
1주차를 듣고 있는데 swift언어를 매우 상세하게 알려줘서 조금 놀랐다
생각보다 더 많이 배울 수 있겠구나를 느꼈고 1주차 내용 중에서 내가 잘 몰랐던 그리고 새롭게 알게된 내용에 대해 적어볼까 한다.
변수를 선언할 때 타입을 정확히 붙여주기 때문에 어떤 타입인지 알 수 있어 편했다.
변수-> var
ex) var useNumber: Int = 3
상수-> let
ex) let fixNumber: Int = 4
Array의 경우 데이터 타의의 값들을 순서대로 저장한다
Dictionary는 순서없이 키와 값을 한 쌍으로 데이터를 저장하는 컬렉션 타입이다
Set 은 같은 데이터 타입의 값을 순서없이 저장하는 리스트 이다.
코드를 보며 하나씩 살펴보자
var numbers: Array<Int> = Array<Int>()
numbers.append(1)
numbers.insert(3, at:1) //insert는 삽입을 하는거 값 과 위치 순으로 적는다
numbers.remove(at:0)
이번에는 딕셔너리이다 백과사전이므로 설명이 따로 있다 즉 키에 맞는 값이 있다고 생각하면 편하다
var dic: Dictionary<String, Int> = Dictionary<String, Int>()
dic["김철수"] = 3
dic.removeValue(forKey: "김민지")
마지막은 Set인데 이거는 그냥 중복있으면 하나로 퉁치는게 매력인 녀석이다.
순서없이 저장해버리는건 살짝 아쉽긴하더라...ㅜ
var set: Set = Set<Int>()
set.insert(20)
set.insert(30)
set.insert(30)
set // 순서없고 30많이 들어가도 한번만 나온다 오류가 뜨는것은 아니네
set.remove(20)
이거는 function이 아니라 func만 적으면 되서 좀 적응이 안되긴한다...;;
func send(name: String) -> String { print("Hello\(name)}
이때 함수 인자의 개수를 정확히 모른다면 쓸 수 있는 히든 스킬이 있다
바로 인자를 적을때 타입 뒤에 ...을 적으면 되는거다!!*
// 가변매게변수를 쓰면 0개이상의 값을 받을수 있고 배열로 들어옴!!함수마다 하나씩만 인자로 가지기 가능
func sendMEssaghe(me: String, friends: String...) -> String {
return "Hello \(friends)! i'm \(me)"
}
sendMEssaghe(me: "Hunter", friends: "Json","kkk","jjj")
이게 가장 매력? 적이라고 생각했던 것중에 하나였다 값이 없는 상황에 대해 옵셔널이라는 타입으로 지정하는것인데 다른 정통 C나 JAVA에는 없는 이상한 녀석이다
다르게 말하면 내가 값으로 옵셔널 타입을 적고 싶으면 옵셔널 바인딩 즉 언래핑을 해서 옵셔널을 풀어줘야 그 안에 값으로 제대로 쓸 수 있다!!
옵셔널은 은근 간단한데 타입에 ? 붙이면 된다!!
? 는 옵셔널로 만들어주기만 한다 => 옵셔널 해제 방법도 몇개 있다
var numString: String? = nil //default값이 nil이긴함 ㅋㅋ
// 언래핑 중 대표적인 강제 언래핑하는법!!
var xx: Int? = 3
print(xx!) //강제 해제인데 이거는 조금 위험함
강제 언래핑은 말 그대로 강제로 옵셔널을 풀어버리기 때문에 조금 위험함;;
이거 말고 guard와 if 로 풀어버리는게 있는데 그걸 추천한다
func test(){
let number: Int? = 5
guard let result = number else {return}
print(result) // guard는 조건이 true가 아니면 else를 실행한다
// number가 옵셔널이 맞기 때문에 guard는 아래 코드를 실행한다!
// number가 nil이면 값이 없기 때문에 else가 실행되어 종료 !!
}
위에 기본은 이제 다 살펴봤으니 여기 부터는 솔직히 다른 언어를 해보고 오지 않았으면 헷갈릴 내용들인것 같다.
가끔 컴공과인거에 감사하는데 이 순간 조금? 고맙긴하더라...
구조체는 복사할 때 값만 복사 되고 클래스는 주소 자체를 복사해버린다!!!! 이게 큰
클래스는 deinit이라고 해서 함수 종료 될때 출현하는 생성자 반대 녀석 피니쉬맨(그냥 이렇게 부르겠다)이 있다!
**공통점은,,,, 너무 많긴한데 몇 가지 적어보면 일단 init이라는 생성자를 둘 다 적을 수 있고, 변수와 메서드를 안에 적을 수 있다.
이거는 직접 적은 구조체 문법이다 보다시피 위에서 설명한 생성자, 변수, 함수를 전부 담고있는 구조체이다.