Multi Developer SuHo

iOS 프로그래밍 11주차 Report 본문

Swift 과제물

iOS 프로그래밍 11주차 Report

Dreaming Developer Student 2023. 11. 14. 10:05
SMALL
  • 모든 내용은 다음과 같은 자료를 활용하여 제작하게 되었습니다.
  • 출처: Do it! 스위프트로 아이폰 앱 만들기 입문, 송호정, 이범근 저,이지스퍼블리싱, 2023년 01월 20일

출처: https://www.yes24.com/Product/Goods/116918114

 

Do it! 스위프트로 아이폰 앱 만들기 입문 - 예스24

아이폰 분야 1위 도서, 개정 7판 출간!최신 버전인 스위프트 5.7, Xcode 14 반영!아이폰 앱 개발 분야 1위 도서, 『Do it! 스위프트로 아이폰 앱 만들기 입문』 개정 7판이 출간되었다. 이번 개정에서는

www.yes24.com

 

GitHub - doitswift/example: Do it! 스위프트로 아이폰 앱 만들기 - 전체 예제 파일

Do it! 스위프트로 아이폰 앱 만들기 - 전체 예제 파일. Contribute to doitswift/example development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

SceneDelegate.swift 파일은 iOS 13 이후로 애플이 도입한 UIScene 세션을 관리하는 역할을 합니다. 이 파일은 앱의 생명 주기와 사용자 인터페이스를 관리하며, 앱이 여러 화면을 동시에 지원하는 멀티 윈도우 환경에서 특히 중요한 역할을 합니다.

예를 들어, iPad에서 Split View나 Slide Over 같은 멀티태스킹 기능을 활용하면 여러 개의 Scene이 동시에 활성화될 수 있습니다. 이 때 각 Scene은 독립적인 생명 주기를 갖게 되는데, 이러한 각 Scene의 생명 주기를 관리하는 것이 바로 SceneDelegate.swift 파일의 역할입니다.

또한, 앱이 백그라운드로 전환되었다가 다시 포그라운드로 전환될 때, SceneDelegate.swift 파일 내의 메소드들이 호출되어 앱의 상태를 적절히 관리하게 됩니다. 이를 통해 사용자는 앱을 더욱 원활하게 사용할 수 있습니다.

이처럼 SceneDelegate.swift 파일은 앱의 생명 주기 관리와 사용자 인터페이스 관리라는 중요한 역할을 수행합니다.

 

 

 

AppDelegate.swift 파일은 iOS 앱의 생명 주기를 관리하는 핵심적인 부분입니다. 이 파일은 앱이 처음 시작될 때, 백그라운드로 전환되거나, 다시 액티브 상태가 될 때, 앱이 완전히 종료될 때 등의 상황에서 특정 동작을 수행하도록 지시합니다.

다음은 AppDelegate.swift 파일이 사용되는 몇 가지 구체적인 예입니다:

  1. application(_:didFinishLaunchingWithOptions:): 이 함수는 앱이 처음 시작될 때 호출됩니다. 이곳에서 앱의 초기 설정을 수행할 수 있습니다.
  2. applicationWillResignActive(_:): 이 함수는 앱이 액티브 상태에서 벗어날 때 호출됩니다. 예를 들어, 사용자가 홈 버튼을 눌러 앱을 떠나거나, 전화나 SMS 메시지와 같은 인터럽션에 의해 앱이 비활성화되는 경우입니다.
  3. applicationDidEnterBackground(_:): 이 함수는 앱이 백그라운드 상태로 전환될 때 호출됩니다. 여기서 앱이 백그라운드에서 실행되는 동안 필요한 작업을 수행하거나, 앱의 상태를 저장할 수 있습니다.
  4. applicationWillEnterForeground(_:): 이 함수는 앱이 백그라운드에서 다시 액티브 상태로 전환되기 직전에 호출됩니다.
  5. applicationDidBecomeActive(_:): 이 함수는 앱이 액티브 상태가 될 때 호출됩니다. 앱이 사용자와 상호작용하기 위한 준비를 마친 상태를 의미합니다.
  6. applicationWillTerminate(_:): 이 함수는 앱이 종료되기 직전에 호출됩니다. 여기서 필요한 정리 작업을 수행할 수 있습니다.

 

 

 

버튼의 내부에서 터치업 (누르고 땔때 동작하는 것) 이벤트  

 

 



커넥션스 인스펙터 

입력받는 오브젝트를 텍스트 필터를 , 안내문을 받는 경우는 플레이솔더 쪽에 기입한다.



/ UISwitch의 상태에 따라 이미지를 전환하는 함수입니다.
@IBAction func switchImageOnOff(_ sender: UISwitch) {
    
    // sender.isOn 속성을 사용하여 스위치의 현재 상태를 체크합니다.
    // 스위치가 켜져있다면 (즉, isOn이 true라면) imgOn 이미지를 imgView에 표시합니다.
    if sender.isOn {
        imgView.image = imgOn
    } 
    // 스위치가 꺼져있다면 (즉, isOn이 false라면) imgOff 이미지를 imgView에 표시합니다.
    else {
        imgView.image = imgOff
    }
}

이 함수는 UISwitch의 상태(isOn)에 따라 이미지 뷰(imgView)의 이미지를 전환하는 역할을 합니다. 스위치가 켜져 있을 경우 imgOn 이미지를, 꺼져 있을 경우 imgOff 이미지를 이미지 뷰에 할당합니다. 이런 방식으로, 스위치의 상태에 따른 이미지 변화를 사용자에게 보여줄 수 있습니다.

 

 

날짜를 설정할 때 사용하는  Object  = Data Picker

 

 

 

// datePickerView라는 상수를 선언하고, 이벤트를 발생시킨 객체(여기서는 날짜 선택기)를 대입합니다.
let datePickerView = sender

// DateFormatter() 인스턴스를 생성하여 formatter라는 상수에 할당합니다.
// DateFormatter는 날짜와 시간을 원하는 형식으로 문자열로 변환하거나, 문자열을 날짜와 시간으로 변환하는 데 사용합니다.
let formatter = DateFormatter()

// formatter의 dateFormat 속성을 설정하여 날짜와 시간의 출력 형식을 "yy-MM-dd HH:mm EEE"로 지정합니다.
// 여기서 "yy"는 두 자리 연도, "MM"은 두 자리 월, "dd"는 두 자리 일, "HH"는 24시간제 시간, "mm"는 분, "EEE"는 요일을 의미합니다.
formatter.dateFormat = "yy-MM-dd HH:mm EEE"

// datePickerView의 date 속성(선택된 날짜와 시간)을 앞서 설정한 형식의 문자열로 변환하여 "선택시간: " 뒤에 추가합니다. 그리고 이 문자열을 lblPickerTime의 text 속성에 할당하여 화면에 표시합니다.
lblPickerTime.text = "선택시간: " + formatter.string(from: datePickerView.date)

// formatter의 dateFormat 속성을 다시 설정하여 시간의 출력 형식을 "hh:mm aaa"로 변경합니다.
// 여기서 "hh"는 12시간제 시간, "mm"는 분, "aaa"는 AM/PM을 의미합니다.
formatter.dateFormat = "hh:mm aaa"




 


여러개의 화면을 만드는 방법은 탭바를 만드는 것이다.




네비게이션 컨트롤러 : 다음 화면으로 왔다갓다 오는 것



 

앱스토어를 통한  mac 용 bmi 프로그램






 

// Foundation 프레임워크를 가져옵니다.
import Foundation

// BMI라는 이름의 클래스를 선언합니다.
class BMI {
    // 체중을 저장할 Double 타입의 인스턴스 변수 weight를 선언합니다.
    var weight : Double
    
    // 키를 저장할 Double 타입의 인스턴스 변수 height를 선언합니다.
    var height : Double
    
    // 초기화 메서드를 선언합니다. 이 메서드는 인스턴스가 생성될 때 자동으로 호출되며,
    // 체중과 키를 매개변수로 받아 이를 인스턴스 변수에 할당합니다.
    init(weight:Double, height:Double){
        self.height = height
        self.weight = weight
    }
    
    // BMI를 계산하는 메서드를 선언합니다. 이 메서드는 체중을 키의 제곱(단위는 미터)으로 나누어 BMI를 계산하고, 이를 반환합니다.
    // 키는 cm 단위로 입력되므로, m 단위로 변환하기 위해 0.0001를 곱합니다.
    func calcBMI() -> Double{
        return weight/(height*height*0.0001)
    }
}

// BMI 클래스의 인스턴스를 생성하고, 이를 han이라는 변수에 할당합니다.
// 이 인스턴스는 체중 62.5kg, 키 172.3cm로 초기화됩니다.
var han = BMI(weight:62.5, height:172.3)

// han의 BMI를 계산하고, 이를 콘솔에 출력합니다.
print(han.calcBMI())

이 코드는 BMI 클래스를 정의하고, 이를 이용하여 한 사람의 BMI를 계산하고 출력하는 예제입니다. 이 때, 키는 cm 단위, 체중은 kg 단위로 입력되며, 계산 결과는 kg/m² 단위의 BMI 값입니다.



class Person {
    var name: String

    init(name: String) {
        self.name = name  // self를 사용하여 인스턴스의 속성과 초기화 메서드의 매개변수를 구분합니다.
    }

    func printName() {
        print("이름은 \(self.name)입니다.") // self를 사용하여 인스턴스의 속성을 참조합니다.
    }
}

let person = Person(name: "뤼튼")
person.printName()  // 출력: 이름은 뤼튼입니다.

위 코드에서 self.name은 Person 클래스의 인스턴스의 name 속성을 의미하며, name은 초기화 메서드의 매개변수를 의미합니다. 이런 식으로 self를 사용하면 속성과 매개변수를 명확하게 구분할 수 있습니다.

또한 self는 인스턴스 메서드 내에서 인스턴스 자신을 참조할 필요가 있을 때 사용할 수 있습니다. 위 코드의 printName 메서드에서 self.name을 사용하여 인스턴스의 name 속성을 참조하였습니다.

이처럼 self는 클래스, 구조체, 또는 열거형의 인스턴스 내부에서 인스턴스 자신을 참조하는 데 사용되는 키워드입니다.


정렬 = 커멘드+i

BMI 를 계산하고 측정하는 앱

// bmiMode.swift

import Foundation

class BMI {

    var weight : Double

    var height : Double

    init(weight:Double, height:Double){

        self.height = height

        self.weight = weight

    }

    func calcBMI() -> String {

        let bmi=weight/(height*height*0.0001)// kg/m*m

        let shortenedBmi = String(format: "%.1f", bmi)

        var body = ""

        if bmi >= 40{

            body = "3단계 비만"

        } else if bmi >= 30 && bmi < 40 {

            body = "2단계 비만"

        } else if bmi >= 25 && bmi < 30 {

            body = "1단계 비만"

        } else if bmi >= 18.5 && bmi < 25 {

            body = "정상"

        } else {

            body = "저체중"

        }

        return "BMI:\(shortenedBmi), 판정:\(body)"

    }

}

var han = BMI(weight:62.5, height:172.3)

print(han.calcBMI())


 Switch~case 문으로 변경

// bmiMode.swift
import Foundation
class BMI {
    var weight : Double
    var height : Double
    init(weight:Double, height:Double){
        self.height = height
        self.weight = weight
    }
    func calcBMI() -> String {
        let bmi = weight/(height*height*0.0001) // kg/m*m
        let shortenedBmi = String(format: "%.1f", bmi)
        var body = ""
        
        switch bmi {
        case 40...:
            body = "3단계 비만"
        case 30..<40:
            body = "2단계 비만"
        case 25..<30:
            body = "1단계 비만"
        case 18.5..<25:
            body = "정상"
        default:
            body = "저체중"
        }
        
        return "BMI:\(shortenedBmi), 판정:\(body)"
    }
}
var han = BMI(weight:62.5, height:172.3)
print(han.calcBMI())




 

LIST