본문 바로가기
iOS

[Swift] 스위프트 실전 프로젝트 1. 도서 관리 프로그램 만들기(3)

by 꿈나무 김땡땡 2020. 7. 3.

2편 : https://ddaengddaeng.tistory.com/81

 

[Swift] 스위프트 실전 프로젝트 1. 도서 관리 프로그램 만들기(1)

출처 앱 12개를 만들며 배우는 Swift4 & iOS11 아이폰 iOS 개발 강좌 https://www.inflearn.com/course/swift4-%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8-ios-%EA%B0%9C%EB%B0%9C/dashboard 앱 12개를 만들며 배우는..

ddaengddaeng.tistory.com

 

출처

앱 12개를 만들며 배우는 Swift4 & iOS11 아이폰 iOS 개발 강좌

https://www.inflearn.com/course/swift4-%EC%8A%A4%EC%9C%84%ED%94%84%ED%8A%B8-ios-%EA%B0%9C%EB%B0%9C/dashboard

 

앱 12개를 만들며 배우는 Swift4 & iOS11 아이폰 iOS 개발 강좌 - 인프런

Swift4 를 이용해 여러개의 앱을 만들어 보는 iOS 개발강좌 입니다. 기본적인 내용을 빠르게 학습하고, 여러 실용적인 예제들로 지식을 자신을 것으로 만들 수 있는 강좌 입니다. 최대한 빠르고, 효

www.inflearn.com

 

주요 내용 : 비주얼 도서 관리 앱

  1. iOS single view로 시작
  2. Product Name : VisualBookManager
  3. Main.storyboard : view 위에 다른 것들을 올려서 사용
  4. ViewController.swift > 오른쪽 버튼 > Add files to... > BookManager 프로젝트의 Book, BookManager, main.swift 3개 파일 선택
  5. main.swift에서 BookManager의 func viewDidLoad()에 아래 코드 추가 (var는 let으로 바꿔야 에러 안남)
var book1 = Book(name: "햄릿", genre: "비극", author: "셰익스피어")
var book2 = Book(name: "누구를 위하여 종을 울리나", genre: "소설", author: "헤밍웨이")
var book3 = Book(name: "죄와벌", genre: "사실주의", author: "톨스토이")

var myBookManager = BookManager()
myBookManager.registerBook(bookObject: book1)
myBookManager.registerBook(bookObject: book2)
myBookManager.registerBook(bookObject: book3)

 

  1. Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > showAllBooksAction을 Show All Books 버튼과 연결 (Touch Up inside)
  2. View Controller > @IBOutlet weak var outputTextView: UITextView! 추가 > Main.storyboard > outputTextView와 Text View 연결
  3.  더 진행하기 전에 Book.swift와 BookManager.swift 의 name, genre, author에 ?를 붙여서 optional 허용 필요 & print에는 !로 unwrapping
  4. Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > showAllBooksAction을 Show All Books 버튼과 연결 (Touch Up inside)
  5. Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > TextField, # of books를 입력 필드와 각각 연결
  6. countLabel 변수 추가
  7. searchAction 메소드 추가
  8. removeAction 메소드 추가

완성 예시

 

코드

1) ViewController.swift

import UIKit

class ViewController: UIViewController {
    var myBookManager = BookManager()
    
    // 변수 정의
    @IBOutlet weak var outputTextView: UITextView!
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var authorTextField: UITextField!
    @IBOutlet weak var genreTextField: UITextField!
    @IBOutlet weak var countLabel: UILabel!

    // 열자마자 실행 되는 코드
    override func viewDidLoad() {
        super.viewDidLoad()
        let book1 = Book(name: "햄릿", genre: "비극", author: "셰익스피어")
        let book2 = Book(name: "누구를 위하여 종을 울리나", genre: "소설", author: "헤밍웨이")
        let book3 = Book(name: "죄와벌", genre: "사실주의", author: "톨스토이")

        myBookManager.registerBook(bookObject: book1)
        myBookManager.registerBook(bookObject: book2)
        myBookManager.registerBook(bookObject: book3)
        
        countLabel.text = "\(myBookManager.countBooks())"
        
        // Do any additional setup after loading the view.
    }
    
    // 책 추가 메소드
    @IBAction func registerAction(_ sender:Any) {
        var bookTemp = Book()
        bookTemp.name = nameTextField.text!
        bookTemp.author = authorTextField.text!
        bookTemp.genre = genreTextField.text!
        
        myBookManager.registerBook(bookObject: bookTemp)
        outputTextView.text = "\(nameTextField.text!) has been registered!"
        // count 다시 불러오기
        countLabel.text = "\(myBookManager.countBooks())"
    }
    
    @IBAction func searchAction(_ sender:Any) {
        let resultBook = myBookManager.searchBook(name: nameTextField.text!)
        if resultBook != nil {
            outputTextView.text = resultBook
        } else {
            outputTextView.text = "We don't have the book that you searched for."
        }
    }
    
    @IBAction func removeAction(_ sender:Any) {
        myBookManager.removeBook(name: nameTextField.text!)
        outputTextView.text = "\(nameTextField.text!) is removed!"
        countLabel.text = "\(myBookManager.countBooks())"
    }
    
    // 메소드 만들기 (메소드-버튼 연결해야 함)
    @IBAction func showAllBooksAction(_ sender: Any) {
//        print("showAllBookAction")
        outputTextView.text = myBookManager.showAllBooks()
    }


}

2) Book.swift

struct Book {
    var name: String?
    var genre: String?
    var author: String?
    
    func bookPrint() {
        print("Name: \(name!)")
        print("Genre: \(genre!)")
        print("Author: \(author!)")
        print("--------------")
    }
}

3) BookManager.swift

import Foundation

class BookManager{
    // 변수
    var bookList = [Book]() // Book 이라는 데이터 타입이 들어가는 비어있는 배열
    
    // 함수1
    func registerBook(bookObject:Book) {
        bookList += [bookObject]
    }
    // 함수2
    func showAllBooks() -> String {
        var strTemp = ""
        for bookTemp in bookList {
            strTemp += "Name: \(bookTemp.name!)\n"
            strTemp += "Genre: \(bookTemp.genre!)\n"
            strTemp += "Author: \(bookTemp.author!)\n"
            strTemp += "-------------------\n"
        }
        
        return strTemp
    }
    // 함수3
    func countBooks() -> Int {
        return bookList.count
    }
    // 함수4
    func searchBook(name: String) -> String? {
        var strTemp = ""
        for bookTemp in bookList {
            if bookTemp.name == name {
                strTemp += "Name: \(bookTemp.name!)\n"
                strTemp += "Genre: \(bookTemp.genre!)\n"
                strTemp += "Author: \(bookTemp.author!)\n"
                strTemp += "-------------------\n"
                
                return strTemp
            }
        }
        return nil
    }

    func removeBook(name: String) {
        for (index, value) in bookList.enumerated() {
            if value.name == name {
                bookList.remove(at: index)
            }
        }
    }
    
}

 

 

 

 

 

 

 

댓글