enum DateError : Error {
case overSizeString
case underSizeString
case incorrectFormat(part:String)
case incorrectData(part:String)
}
import Foundation
struct Date {
var year : Int
var month : Int
var date : Int
}
func parseDate(param:NSString) throws -> Date {
guard param.length == 10
else {
if param.length > 10 {
throw DateError.overSizeString
}
else {
throw DateError.underSizeString
}
}
var dateResult = Date(year: 0, month: 0, date: 0)
if let year = Int(param.substring(with: NSRange(location:0, length:4))) {
dateResult.year = year
}
else {
throw DateError.incorrectFormat(part: "year")
}
if let month = Int(param.substring(with: NSRange(location: 5, length: 2))) {
guard month > 0 && month < 13
else {
throw DateError.incorrectData(part: "month")
}
dateResult.month = month
} else {
throw DateError.incorrectFormat(part: "month")
}
if let date = Int(param.substring(with: NSRange(location: 8, length: 2))) {
guard date > 0 && date < 31 else {
throw DateError.incorrectData(part: "date")
}
dateResult.date = date
}
else {
throw DateError.incorrectFormat(part: "date")
}
return dateResult
}
try parseDate(param: "2020-02-28")
let date = try parseDate(param: "2020-02-28")
일단 여기까지 이해가 가지 않는 부분은 if 를 통해서 상수 year, month, date 를 만들었는데 여기 안에 있는 구문들이 포함된 상수 year, month, date 들은 dateResult 에 대입된단 말이지.. 그리고 dateResult 는 결국에 구조체 Date 와 연결이 되어 있고...
근데 왜 아래에서 호출 할땐 parseDate 의 매개변수인 param 에다가 저 상수들의 값을 써버리는거냐..? 만약에 상수들과 parseDate의 매개변수인 param 이 연결되어서 substring 을 통해서 한번에 문자열을 쓰면 location 이랑 length 를 통해서 추출 된다고 생각하면 될텐데 dateResult 랑 연결된건 분명한데 parseDate 의 매개변수인 param 과 연결된 부분은 못찾겠다...
설명 좀 부탁한다...
-------------------------------------------------------------------------------------------------------------
func getPartDate(date: NSString, type: String) {
do {
let date = try parseDate(param: date)
switch type {
case "year" :
print ("(date.year)년 입니다.")
case "month" :
print ("(date.month) 입니다.")
case "date" :
print ("(date.date) 입니다.")
default:
print ("입력값에 해당하는 날짜가 없음")
}
}
catch DateError.overSizeString {
print ("문자열이 너무 김")
}
catch DateError.underSizeString {
print ("문자열이 너무 짧음")
}
catch DateError.incorrectData(let part) {
print ("잘못된 값임")
}
catch DateError.incorrectFormat(let part) {
print ("잘못된 형식")
}
catch {
print ("알수 없는 오류 발생")
}
}
getPartDate(date: "1999-12-30", type: "year")
getPartDate(date: "1999-13-21", type: "month")
여긴 catch 부분인데 getpartdate 가 위에 parseDate 하고 도데체 연결된 부분이 메소드 안에 상수 date 인거 같은데 아래 구문들이 getPartDate의 매개변수인 date 와 연결된 부분이 없는데
왜 또 날짜 값을 getPartDate 의 매개변수인 date 에 줄수 있는거임~!??
와 진짜 사람 돌아 버리겠네...
함수 공부 다시 해야되나...?? 내가 뭔가 놓치고 있는게 있는건가..
참고로 나는 프로그래밍 처음 입문해서 스위프트 기본 문법 공부 하는 중임....
이것 좀 알려주면 내가 은혜는 꼭 갚도록 하지...
도데체 어디가 어떻게 연결이 다 되어있는건지 알수가 없다...
오~ 님천재 인듯 이건 뭔가요?
이건 스위프트 임니다.....
일단 읽기가 싫어지는 글이라 패스