나만의 iOS 앱 개발 입문 : iOS개발 강의 흔적남기기 1일차

박경현·2022년 2월 27일
0

ios 개발자가 되고 싶어서 유튜브를 잦아보던 중 패스트캠퍼스에서 진행하는 ios입문 강의를 알게되어 신청하여 듣고 있다

1주차를 듣고 있는데 swift언어를 매우 상세하게 알려줘서 조금 놀랐다
생각보다 더 많이 배울 수 있겠구나를 느꼈고 1주차 내용 중에서 내가 잘 몰랐던 그리고 새롭게 알게된 내용에 대해 적어볼까 한다.


변수 선언

변수를 선언할 때 타입을 정확히 붙여주기 때문에 어떤 타입인지 알 수 있어 편했다.
변수-> var
ex) var useNumber: Int = 3
상수-> let
ex) let fixNumber: Int = 4

Array, Dictionary, Set 선언방식

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이라는 생성자를 둘 다 적을 수 있고, 변수와 메서드를 안에 적을 수 있다.

이거는 직접 적은 구조체 문법이다 보다시피 위에서 설명한 생성자, 변수, 함수를 전부 담고있는 구조체이다.

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글