[swift] 0.~10.

RudinP·2023년 9월 7일
0

Study

목록 보기
28/227

국비지원학원이 끝났다.
유니티만 계속 파기에는 너무 좁은 선택인 듯 하여 평소에 관심있던 Swift를
남은 방학동안 공부하려고 한다.
사실은 원래 2021년경에 동아리에서 짧게 스터디를 했었으나,
지금은 다 까먹어서, 다시 진지하게 공부해보려고 한다.


참고하는 강의

<개발하는 정대리 스위프트 기초 문법>

매일 공부 계획

  • swift 강의 듣기
  • 관련 진도의 백준 3문제 1문제라도^^ 풀기 (쉬운문제는 +@)

목표

  • 깔끔한 노래재생 위젯 만들기(기본 애플뮤직 연동)
    • 단색 배경으로 만들것임
      • 노래 이미지에서 제일 많은 색상 따와서 색 변하게 하는 옵션 추가해도 괜찮을듯
    • 기본 애플뮤직 위젯 핫핑크라 극.혐임.
    • 그라데이션 넣은 디자인 극.혐

ios 개발자 준비

  • 기술블로그 운영
  • 어플 출시
    • MVP(Minimum Value Product)
      • 출시 확률이 높아진다.
      • 출시 경험이 쌓인다.
      • 앱스토어 심사지침 필독
    • 애플 휴먼 인터페이스 디자인
      • 너무 벗어나면 리젝 가능성 있음

1. 조건문

새 파일 열기

  • File - New - Playground - Blank

변수 선언

var 변수이름 : 변수타입
var a : Bool

조건문

if (a == true){
	print("a is true")
} else {
    print("a is false")
}
  • 괄호를 제외해도 괜찮다.
    if a == true{}

삼항연산자

var title : String = isDarkMode ? "다크모드 입니다" : "다크모드아님"

  • C# 삼항연산자와 동일

프린트문에서 변수값을 출력하고자 할때

print("title : \(title)")

  • 출력할 값이 하나일 경우 아래도 가능
    print("title", title)

2. foreach

배열

var myArray : [Int] = [1, 2, 3]

  • 대괄호를 사용
  • 콜렉션에 포함
    • Array
    • Set
    • Dictionary
    • Tuple

반복문

for item in myArray{
	print(item:\(item))
 }
for item in myArray where item > 5
    (생략)
for item in myArray where item % 2 == 0
	(생략)
  • swift에서는 조건 또한 붙일 수 있다.

3. enum & case

enum School{
	case elementary, middle, high
    //case middle
    //case high 로 나눠써도 ok
}

상수 let

let yourSchool = School.elemantary

enum이 값을 가질 수 있다.

enum Grade : Int{
	case first = 1
    case second = 2
}

let yourGrade = Grade.second.rawValue
print("yourGrade : \(yourGrade)")
  • enum의 값에 접근하려면 .rawValue

enum에 값 할당 가능

enum SchoolDetail{
	case elemantary(name : String)
    case middle(name : String)
    case high(name : String)
}

let yourMiddleSchoolName = SchooDetail.middle(name : "중학교")
  • 함수도 넣을 수 있다.
enum Sample{
	case elemantary(name : String)
	func getName() -> String{
    	switch self{
        	//let 위치
        	case .elemantary(let name):
            	return name
            case let .middle(name):
            	return name
            case let .high(name):
            	return name
        }
    }
}

4. for

(n...m => m포함)
(n..<m => m제외)
for i in 0...5 {}
for i in 0..<5 where i % 2 == 0 {}

  • 만약 i를 사용하지 않는 경우 _ 사용 가능
    for _ in 0..<25 {}

난수생성

Int.random(in: 0...100)

빈 배열 생성

var randomInts: [Int] = [Int]()
var randomInts: [Int] = []

배열에 값 추가

randomInts.append(randomNumber)


5. Optional, Unwrapping

  • Optional : 값이 nil인지 아닌지 모르는 경우(null)
    var someVariable : Int? = nil
    if someVariable == nil { someVariable = 90 }
    -> Optional(90) 이라고 됨
  • Unwrapping : Optional 해제
    if let otherVariable = someVariable {}
    • otherVariable은 Optional이 아님
    • someVariable이 nil이 아니라면 otherVariable에 값 복사

Optional의 기본값 설정

let myValue = someVariable ?? 10

  • someVariable이 nil이면 10으로 값 설정

guard

func unwrap(parameter: Int?){
	print("unwrap() called")
    //값이 없으면 리턴
    guard let unWrappedParam = parameter else{
    	return
    }
    print("unWrappedParam: \(unWrappedParam)")

함수 파라미터 넣기

func unwrap(parameter : Int?)
-> 사용할 때 unwrap(parameter : firstValue)같이 parameter : 를 써야함
func unwrap(_ parameter : Int?)
-> 사용할 때 unwrap(firstValue) 같이 생략 가능


6. class vs struct

  • 둘 다 모델의 종류다.

struct

  • 생성자가 필요없다 (자동생성)
  • call by value
struct YoutuberStruct{
	var name : String
    var subscribersCount: Int
}

var devJeong = YoutuberSturct(name: "정대리", subscribersCount: 99999)
var devJeongClone = devJeong

devJeongClone.name = "호롤롤로"
//Call by value
//정대리
print("devJeong.name : \(devJeong.name)")

class

  • 생성자가 필요하다
  • call by reference
class YoutuberClass{
	var name : String
    var subscribersCount: Int
    //생성자, 메모리에 올리기
    init(_ name : String, subscribersCount : Int){
    	/self == this
    	self.name = name
        self.subscribersCount = subscribersCount
    }
}

var devJeong = YoutuberClass(name: "정대리", subscribersCount: 99999)
var devJeongClone = devJeong

devJeongClone.name = "호롤롤로"
//Call by reference
//호롤롤로
print("devJeong.name : \(devJeong.name)")

7. Property Observer

  • 값이 변경될때마다 출력
    • willSet : 기존값
    • didSet : 변경된 값
var myAge = 0{
	willSet{
    	print("값이 설정될 예정이다. myAge: \(myAge)")
    }
    didSet{
    	print("값이 설정되었다. myAge: \(myAge)")
    }
}

myAge = 10
myAge = 20
  • 출력물
값이 설정될 예정이다. myAge: 0
값이 설정되었다. myAge: 10
값이 설정될 예정이다. myAge: 10
값이 설정되었다. myAge: 20

8. 함수 매개변수 이름

  1. func myFunction(name: String) -> String{}
    => myFunction(name: "정대리")

  2. func myFunctionSecond(다른이름 name: String) -> String{}
    => myFunction(다른이름 : "정대리")

  3. func myFunctionThird(_ name: String) -> String{}
    => myFunctionThird("정대리")


9. 제네릭

그냥 일반적인 다른 언어의 제네릭과 동일

class MyArray<T>{
	var elements = [T]()
    init(_ elements: [T]){
    	self.elements = elements
    }
}
  • T는 또다른 class, struct 또한 받을 수 있다.(당연하긴 함)

10. 클로저(Closure)

메소드랑 비슷한 느낌
해당 변수를 콜하면 작성해둔 로직 실행

// String을 반환하는 클로저
let myName: String = {
	//myName으로 들어간다
    return "정대리"
}()

//클로저 정의
//let myRealName = {(name: String) -> String in return ""}과 동일
let myRealName: (String) -> String = { (name: String) -> String in
	return "개발하는 \(name)"
}

let myRealNameLogic : (String) -> Void = { (name: String) in 
	print("개발하는 \(name)")
}

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글