func checkAgeError(age: String) -> Bool{
if !age.allSatisfy({ $0.isNumber}){
print("입력한 나이정보가 잘못되었습니다. 입력 형식을 확인해주세요.")
return false
} else if let changeToInt = Int(age) {
if changeToInt >= 1000 {
print("입력한 나이정보가 잘못되었습니다. 입력 형식을 확인해주세요.")
return false
}
}
return true
}
func checkAgeError(age: String) -> Bool{
guard age.allSatisfy({ $0.isNumber}) else {
print("입력한 나이정보가 잘못되었습니다. 입력 형식을 확인해주세요.")
return false
}
guard let changeToInt = Int(age), changeToInt <= 1000 else {
print("입력한 나이정보가 잘못되었습니다. 입력 형식을 확인해주세요.")
return false
}
return true
}
→ 이름만 보고도 무슨 의미인 지 알 수 있도록 하자!
func calculateSlashNum(input: String) -> Bool {
if (input.filter{ $0 == "/" }.count != 2) {
return false
}
return true
}
func validateSlashInput(input: String) -> Bool {
if (input.filter{ $0 == "/" }.count != 2) {
return false
}
var ContactSet : Set<Contact> = []
var contacts : Set<Contact> = []
→ 반복되는 출력문을 enum을 묶자.
enum GuideText {
static let menu = "1) 연락처 추가 2) 연락처 목록보기 3) 연락처 검색 x) 종료"
static let selectMenu = "메뉴를 선택해주세요 : "
}
print(GuideText.menu)
print(GuideText.selectMenu,terminator: "")
enum MenuType: String {
case addContact = "1"
case viewContactList = "2"
case findContact = "3"
case exit = "x"
}
while !isMenuInputError {
print(GuideText.menu)
print(GuideText.selectMenu,terminator: "")
guard let input = readLine(), input != "" else{
continue
}
switch input{
case "1":
addContact()
case "2":
for contact in contacts.sorted(by: {$0.name < $1.name}) {
print("- \(contact.name) / \(contact.age) / \(contact.phoneNumber)")
}
print("")
continue
case "3":
print("연락처에서 찾을 이름을 입력해주세요 : ", terminator: "")
guard let inputValue = readLine() else {
continue
}
findContact(inputName: inputValue)
continue
case "x":
isMenuInputError = true
print("\n[프로그램 종료]")
default:
print("선택이 잘못되었습니다. 확인 후 다시 입력해주세요.\n")
continue
}
while !isMenuInputError {
print(GuideText.menu)
print(GuideText.selectMenu,terminator: "")
guard let input = readLine(), let menu = MenuType(rawValue: input) else{
print("선택이 잘못되었습니다. 확인 후 다시 입력해주세요.\n")
continue
}
switch menu{
case .addContact:
addContact()
case .viewContactList:
for contact in contacts.sorted(by: {$0.name < $1.name}) {
print("- \(contact.name) / \(contact.age) / \(contact.phoneNumber)")
}
print("")
continue
case .findContact:
print("연락처에서 찾을 이름을 입력해주세요 : ", terminator: "")
guard let inputValue = readLine() else {
continue
}
findContact(inputName: inputValue)
continue
case .exit:
isMenuInputError = true
print("\n[프로그램 종료]")
}
struct Contact : Hashable {
let name : String
let age : String
let phoneNumber : String
var description: String {
"- \(self.name) / \(self.age) / \(self.phoneNumber)"
}
}
// contact는 Contact의 instance이다.
print(contact.description)