2편 : https://ddaengddaeng.tistory.com/81
출처
앱 12개를 만들며 배우는 Swift4 & iOS11 아이폰 iOS 개발 강좌
주요 내용 : 비주얼 도서 관리 앱
- iOS single view로 시작
- Product Name : VisualBookManager
- Main.storyboard : view 위에 다른 것들을 올려서 사용
- ViewController.swift > 오른쪽 버튼 > Add files to... > BookManager 프로젝트의 Book, BookManager, main.swift 3개 파일 선택
- 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)
- Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > showAllBooksAction을 Show All Books 버튼과 연결 (Touch Up inside)
- View Controller > @IBOutlet weak var outputTextView: UITextView! 추가 > Main.storyboard > outputTextView와 Text View 연결
- 더 진행하기 전에 Book.swift와 BookManager.swift 의 name, genre, author에 ?를 붙여서 optional 허용 필요 & print에는 !로 unwrapping
- Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > showAllBooksAction을 Show All Books 버튼과 연결 (Touch Up inside)
- Main.storyboard > View Controller 클릭 > 우측의 Connection Inspector 클릭 > TextField, # of books를 입력 필드와 각각 연결
- countLabel 변수 추가
- searchAction 메소드 추가
- 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)
}
}
}
}
'iOS' 카테고리의 다른 글
[Swift] 스위프트 실전 프로젝트 3. 회원가입하기 (0) | 2020.07.06 |
---|---|
[Swift] 스위프트 실전 프로젝트 2. 디지털 액자앱 만들기 (0) | 2020.07.04 |
[Swift] 스위프트 실전 프로젝트 1. 도서 관리 프로그램 만들기(2) (0) | 2020.07.03 |
[Swift] 스위프트 실전 프로젝트 1. 도서 관리 프로그램 만들기(1) (0) | 2020.07.03 |
[Swift] Optional (0) | 2020.07.03 |
댓글