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으로 반환해주어 동일한 계산을 여기저기 반복해서 쓸 필요 없이 매개변수를 통해 입력만 해주면 끝!