IOS Swift/Festagram
Swift 프로젝트 : FestaGram 05 번외 기타 기능 01
500beckwon
2020. 4. 20. 18:23
포스팅을 보거나 쓸 때 날짜를 필수적으로 사용해야 하는데 파일마다 DateFormatter를 이용해서 사용하면 코드도 중복되고 해서 낭비가 되니 구글링과 삽질을 통해 static을 이용한 함수를 하나 만들어내었다.
dateformatter만 쓰면 문제가 안되지만 UI,와 다른것까지 써서 좀 복잡해졌다.
일단 Appdelegate 파일에
let date = Date()를 초기화 해주고
새로운 파일을 만들어서 아래 코드를 입력하면 된다.
import UIKit
class DateCalculation {
static let shread = DateCalculation()
func requestDate(_ stringDate: String,
_ dateFomatter: DateFormatter,
_ today: Date,
_ calendar: Calendar) -> String {
let dateString = dateFomatter.string(from: today)
let nowToday = dateFomatter.date(from: dateString) ?? today
let postdates = dateFomatter.date(from: stringDate) ?? today
let calendarC = calendar.dateComponents([.year,.month,.day,.hour,.minute,.second], from: postdates,to: nowToday)
if case let (y?, m?, d?, h?, mi?, s?) = (calendarC.year, calendarC.month, calendarC.day, calendarC.hour,calendarC.minute,calendarC.second) {
if y == 0, m == 0, d == 0, h == 0, mi == 0 {
return "\(s)초 전"
} else if y == 0, m == 0, d == 0, h == 0, mi >= 1 {
return "\(mi)분 전"
} else if y == 0, m == 0, d == 0, h >= 1 {
return "\(h)시간 전"
}else if y == 0, m == 0, d >= 1{
return "\(d)일 전"
}else if y == 0, m >= 1 {
return "\(m)개월 전"
}else if y >= 1, m >= 12 {
return "\(y)년 전"
}
}
return "\(today)"
}
}
Firebase에 날짜 값을 받을 때 전송을 String으로 해서 Date타입 비교가 안돼기 때문에 Dateforamtter로 변환해준 후
비교해서 시간에 따라 년,월,일,시,분,초로 String으로 반환하는 함수
today는 appdelegate.date로 입력하면 되고 된다!
이렇게 외부로 초기화 한다음
연결 된 UIlabel.text = 만들어 주면 자동 연산하여 String으로 반환해주어 동일한 계산을 여기저기 반복해서 쓸 필요 없이 매개변수를 통해 입력만 해주면 끝!