Swift study - 문법들의 간단한 사용 예시

rbw·2022년 2월 9일
0

swift-study

목록 보기
1/17
post-thumbnail

swift를 공부 할 일이 생겨서 이번에는 블로그로 작성을 하면서 해보자 라는 생각으로 쓰게 된 첫 게시글

인프런 강의를 보며 작성 중 ! (개발하는 정대리 스위프트 기초 문법)

swift 문법

조건문

var isDarkMode : Bool = true

if (isDarkMode == true){
  print("다크모드 입니다")
} else {
  print("다크모드가 아닙니다.")
}

if !isDarkMode {
  print("다크모드가 아닙니다.")
} else {
  print("다크모드 입니다.")
}

var text : String = isDarkMode == true ? "다크모드 입니다" : "다크모드 아닙니다"

for-each 반복문

// 콜렉션 : 데이터를 모아둔 것
// 배열, 셋, 딕셔너리 등
var myArray : [Int] = [0,1,2,3,4,5,6,7]

for item in myArray {
  print("item: \(item)")
} 
// 조건을 추가 가능하다
for item in myArray where item > 5 {
  print("5보다 큰 수: \(item)")
}

enum 케이스 나누기

enum School {
  case elementary, middle, high
}
let yourSchool = School.high
print("yourSchool: \(yourSchool)") // high 출력

// enum 케이스에 값을 전달하는 경우
enum Grade : Int {
  case first = 1
  case second = 2
}
let yourGrade = Grade.second.rawValue // 2  

// 또 다른 방식
enum SchoolDetail {
  case elemantary(name: String)
  case middle(name: String)
  case high(name: String)

  func getName() -> String {
    switch self {
    case .elementary(let name):
      return name
    case let .middle(name):
      return name
    case .high(let name):
      return name
  }
}
let yourMiddleSchoolName = SchoolDetail.middle(name: "중학중학교")
print("yourMiddleSchoolName: \(yourMiddleSchoolName)") 
// middle(name: "중학중학교") 출력
print("yourMiddleSchoolName: \(yourMiddleSchoolName.getName())") 
// 중학중학교 출력

For 반복문

// range
// 0...5 >> 0,1,2,3,4,5
for i in 0...5{
  print(i)
}

//빈 배열 만드는 방법
var randomInts: [Int] = [] 
var randomInts: [Int] = [Int]()

// 24까지
for _ in 0..<25 {
  let randomNumber = Int.random(in: 0...100)
  randomInts.append(randomNubmer)
}

Unwrap 옵셔널변수

// 옵셔널이란 ? 값이 있는지 없는지 모름

var someVariable : Int? = nil
if someVariable == nil {
  someVariable = 99
}

print(someVarialbe) // Optional(99) 출력

// 언랩핑 ? 감싸져있는 것을 벗기는 것
// 옵셔널인 상태의 변수를 벗긴다라는 의미
if let otherVariable = someVariable {
  print("언랩핑 되었다. 즉 값이 있다. otherVariable : \(otherVariable)")
} else{
  print("값 x")
}
// otherVariable : 99 출력

someVariable = nil
// 값이 비어있으면 기본값으로 어떤 값을 넣겠다
let myValue =someVariable ?? 10
print("\(myValue)") // 10

// 다른 언랩핑 방식 guard let
// if let과 방식은 비슷하다
func unwrap(parameter: Int?){
  print("unwrap() called")
  // 값이 없으면 리턴 함
  guard let unWrappedParam = parameter 
  
  else{
    return
  }
  print("unWrappedParam : \(unWrappedParam)")
}

클래스와 스트럭트

// 유튜버 (데이터) 모델 - struct / 구조체
struct YoutuberStruct {
  var name : String
  var subscribersCount : Int
}

// 값의 복사, 클론에 수정을해도 원본에는 영향 x
var devJeong = YoutuberStruct(name: "아무개", subscribersCount: 123)
var devJeongClone = devJeong

// 클래스
class YoutuberClass {
  var name : String
  var subscribersCount : Int
  // 생성자 - 즉 메모리에 올림
  // init 으로 매개변수를 가진 생성자 메소드를 만들어야
  // 매개변수를 넣어서 그 값을 가진 객체를 만들 수 있다
  init(name: String, subscribersCount: Int){
    self.name = name
    self.subscribersCount = subscribersCount
  }
}

// 복사가 아니라 참조를 하기 때문에 값의 변경을 하면 원본에도 영향이 간다
var jeongDaeRi = YoutuberClass(name: "정대리", subscribersCount: 1234)
var jeongDaeriClone = jeongDaeri

프로퍼티 옵저버

변수의 값이 설정되기 전과 후를 볼 수 있다

var myAge = 0 {
  willSet{
    print("값이 설정될 예정이다. myAge: \(myAge)")
  }
  didSet{
    print("값이 설정되었다. myAge: \(myAge)")
  }
}

myAge = 10
// willSet 실행 후(0 출력), didSet 실행이된다(10 출력)

함수 매개변수 이름

// 함수, 메소드 정의
func myFunction(name: String) -> String{
  return "안녕하세요 ? \(name) 입니다"
}

// 함수, 메소드 호출한다. call
myFunction(name: "정대리")

// with로 정의하는 방식 호출부에서 달라짐
func myFunction2(with name: String) -> String{
  return "안녕하세요 ? \(name) 입니다"
}
myFunction2(with: "정대리")

// 아예 생략 하고 싶을 때
func myFunction3(_ name: String) -> String{
  return "안녕하세요 ? \(name) 입니다"
}
myFunction3("정대리")

제네릭

struct MyArray<SomeElement>{
  //제네릭을 담은 빈 배열
  var elements : [SomeElement] = [SomeElement]()

  init(_ elements: [SomeElement]){
    self.elements = elements
  }
}

struct Friend{
  var name: String
}

var mySomeArray = MyArray([1,2,3])
print(mySomeArray)
var myStringArray = MyArray(["가","나","다"])
print(myStringArray)

// 제네릭이란 어떠한 형태도 다 받을 수 있다
// 주로 MyArray<T> 로 표현을 함
profile
hi there 👋

0개의 댓글