이 영역을 누르면 첫 페이지로 이동
Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

페이지 맨 위로 올라가기

Daily Growth

Loving you is the reason I live. That’s why every day is precious, a step toward my dreams and you.

Swift 조건문 실습으로 알아보는 인터페이스와 로직 연결

  • 2025.06.11 13:43
  • IT

Swift if else

🧠 Swift/Xcode – UI 구성, IBAction, 조건문(if/else), 윤년 계산기

📌 학습 주제 요약

  • 스토리보드(Storyboard)로 UI 구성
  • UILabel, UIButton, UIImageView 속성 조절
  • IBAction 연결 (버튼 다중 연결)
  • 조건문(IF, ELSE IF, ELSE)로 로직 분기
  • 윤년 판별 로직 구현 (중첩 조건문)
  • Xcode 뷰 계층 vs Photoshop 레이어 차이 이해

 

1️⃣ 프로젝트 시작: UI 기본기 익히기

🎯 목표

  • 스토리보드 기반 UI 배치 이해
  • 텍스트 잘림 등 기본적인 시각 문제 해결

🧪 실습: UILabel 잘림 해결

  • 문제: 긴 텍스트가 잘림
  • 해결:
    • numberOfLines = 0 → 줄 수 무제한
    • Auto Shrink 설정 → 글꼴 최소 크기 제한
label.numberOfLines = 0

🔎 작은 화면에서도 텍스트가 깨지지 않게 하는 핵심 설정

 

 

2️⃣ UI 계층 구조 & 이미지 겹침 문제

🥚 실습 예제: ‘계란 삶기 앱’

  • 구성:
    • 버튼 3개 (Soft, Medium, Hard)
    • 이미지 뷰 3개 (삶기 상태별 이미지)
  • 문제 발생: 버튼 위에 이미지뷰가 있어서 텍스트가 가려짐

✅ 해결

  • Document Outline 창 열고 뷰 순서 확인
  • 이미지뷰가 버튼보다 위에 있으면 텍스트 가림
  • → 이미지뷰를 버튼 아래로 이동 (문서 개요에서 드래그)

 

📌 포토샵 레이어와 Xcode의 차이점

도구 문서 상 위에 있음 실제로 위에 보임?
Photoshop 예 (텍스트 위에 있으면 앞에) 예
Xcode (Document Outline) 예 (텍스트 위에 있으면 뒤에) 아니오

📌 Xcode에서는 아래쪽에 있는 뷰가 화면 상 위에 그려진다.
즉, 시각적으로 보이는 순서 = Document Outline의 하단 → 상단 순서로 위로 보임
view.addSubview()의 호출 순서와 관련 있음

 

3️⃣ IBAction 연결 (여러 버튼 → 하나의 액션)

목표

  • 버튼 클릭 시 각각의 삶기 상태(Soft, Medium, Hard) 구분
  • 3개의 버튼 → 하나의 IBAction으로 연결
@IBAction func hardnessSelected(_ sender: UIButton) {
    print(sender.currentTitle!)
}
  • sender.currentTitle → 어떤 버튼이 눌렸는지 확인 가능

🧩 버튼들을 개별 연결하지 않고, 공통 액션으로 처리하는 게 유지 관리에 유리

4️⃣ 도전 과제 1: 버튼별 삶기 시간 출력

조건

  • Soft → 5초
  • Medium → 7초
  • Hard → 12초
let softTime = 5
let mediumTime = 7
let hardTime = 12

if hardness == "Soft" {
    print(softTime)
} else if hardness == "Medium" {
    print(mediumTime)
} else {
    print(hardTime)
}

나중에는 Timer를 연결해 실제 카운트다운 기능 구현 가능:)

 

5️⃣ 도전 과제 2 – 윤년(leap year) 판별기

📋 문제 설명

  • 윤년 조건:
    1. 4로 나누어떨어짐
    2. 단, 100으로 나누어떨어지면 윤년 아님
    3. 단, 400으로 나누어떨어지면 다시 윤년임

 

🧾 제공된 문제 코드

//Don't change this
var aYear = Int(readLine()!)! 

func isLeap(year: Int) {
  // 여기에 로직을 작성하세요
}
  • aYear는 사용자의 입력값
  • 함수 호출은 자동으로 실행됨 → isLeap(year:) 함수 내부만 작성하면 됨
  • readLine()은 이미 포함되어 있으므로 신경 쓸 필요 없음 (*** 참고로 readLine()은 Swift에서 콘솔 입력을 받을 수 있는 공식 함수이며, iOS 앱 UI와는 별개다. 실습이나 알고리즘 문제에선 자주 등장하지만, 실제 앱 개발에선 거의 안 쓴다.)

 

✅ 내 코드 (함수 내부)

func isLeap(year: Int) {
  if year % 4 == 0 {
    if year % 100 == 0 {
      if year % 400 == 0 {
        print("YES")
      } else {
        print("NO")
      }
    } else {
      print("YES")
    }
  } else {
    print("NO")
  }
}

💡 핵심 개념

  • % : 나머지 연산자
  • 중첩 조건문을 통해 복잡한 논리를 단계적으로 처리

⚠️ 시행착오 & 디버깅 팁

  • IBOutlet 대신 IBAction을 잘못 연결 → 버튼 눌러도 반응 없음
  • 사용하지 않는 상수 선언 → 경고 발생

: Swift는 변수나 상수를 선언하고 사용하지 않으면 경고를 표시한다. 하지만 이후에 사용할 계획이라면, 경고는 무시해도 괜찮다. (예: 버튼 타이틀을 저장해두고 아래 조건문에서 사용할 예정일 때) 반대로 정말 사용하지 않는다면 _로 바꾸거나 삭제하는 것이 좋다.

  • Xcode 경고 메시지 복사해서 구글 검색 → StackOverflow에서 해결됨
  • =(대입) vs ==(비교) 혼동 주의

 

 

반응형

'IT' 카테고리의 다른 글

Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법  (3) 2025.06.13
Swift 코드 가독성을 바꾸는 switch 문 핵심정리  (1) 2025.06.12
UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습  (1) 2025.06.10
Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록  (0) 2025.06.09
디자이너가 앱을 직접 만들며 깨달은 iOS Auto Layout의 본질  (4) 2025.06.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법

    Swift Optional과 Dictionary로 데이터 다루는 실용적인 방법

    2025.06.13
  • Swift 코드 가독성을 바꾸는 switch 문 핵심정리

    Swift 코드 가독성을 바꾸는 switch 문 핵심정리

    2025.06.12
  • UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습

    UIButton에 감각적인 터치 피드백 넣기: Swift 비동기 처리 실습

    2025.06.10
  • Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록

    Swift AVFoundation 제대로 활용하기: 실로폰 앱 개발 기록

    2025.06.09
다른 글 더 둘러보기

정보

Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

  • Daily Growth의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (446) N
      • Design History (69)
      • IT (147) N
      • Typography (13)
      • UX • UI Design (10)
      • Money (62)
      • Health (53)
      • Words (6)
      • Reading (21)
      • English (64)

    나의 외부 링크

    • lody.design
    • lody.canada
    • lody.study
    • lody.diary

    정보

    self-improvement의 Daily Growth

    Daily Growth

    self-improvement

    블로그 구독하기

    • 구독하기
    • 네이버 이웃 맺기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © self-improvement.

    티스토리툴바