显示基于3个int值的String

Kev*_*VuD -1 string string-formatting ios swift

我正在尝试以这种格式显示字符串

x day, y hr, z min
Run Code Online (Sandbox Code Playgroud)

其中x,y,z是来自用户和用户的Int值,如果日期和hr为0,则需要至少发送5分钟.

这是我处理显示用户输入的函数

    func pickerTimeShow(day: Int, hour: Int, minutes: Int) -> String {
    if day > 0 {
        return "\(day) day, \(hour) hr, \(minutes) min"
    }
    if hour > 0 {
        return "\(hour) hr, \(minutes) min"
    }
    return "\(minutes) min"
}
Run Code Online (Sandbox Code Playgroud)

但是,如果用户发送pickerTimeShow(day:0,hour:2,minutes:0),我的字符串将显示

2 hr, 0 min
Run Code Online (Sandbox Code Playgroud)

这不是主意,因为它假设只是显示

2 hr
Run Code Online (Sandbox Code Playgroud)

此外,如果用户发送pickerTimeShow(day:5,hour:0,minutes:5),我的字符串将显示

5 day, 0 hr, 5 min
Run Code Online (Sandbox Code Playgroud)

但我只是想要

5 day, 5 min
Run Code Online (Sandbox Code Playgroud)

你有一个简单的解决方案来处理这种情况吗?除了添加更多if语句来检查哪个使我的函数真的很长,我真的想不出别的什么.非常感谢.

vac*_*ama 5

这是一种方法.将这些碎片放入一个数组中,然后在最后加入它们:

func pickerTimeShow(day: Int, hour: Int, minutes: Int) -> String {
    var result = [String]()

    if day > 0 {
        result.append("\(day) day")
    }

    if hour > 0 {
        result.append("\(hour) hr")
    }

    if minutes > 0 {
        result.append("\(minutes) min")
    }

    if result.isEmpty {
        // decide what to return in the case that all are zero
        return "0 min"
    } else {
        return result.joined(separator: ", ")
    }
}
Run Code Online (Sandbox Code Playgroud)

测试:

pickerTimeShow(day: 0, hour: 0, minutes: 0)  // "0 min"
pickerTimeShow(day: 5, hour: 0, minutes: 0)  // "5 day"
pickerTimeShow(day: 0, hour: 6, minutes: 0)  // "6 hr"
pickerTimeShow(day: 0, hour: 0, minutes: 7)  // "7 min"
pickerTimeShow(day: 5, hour: 6, minutes: 0)  // "5 day, 6 hr"
pickerTimeShow(day: 0, hour: 6, minutes: 7)  // "6 hr, 7 min"
pickerTimeShow(day: 5, hour: 0, minutes: 7)  // "5 day, 7 min"
pickerTimeShow(day: 5, hour: 6, minutes: 7)  // "5 day, 6 hr, 7 min"
Run Code Online (Sandbox Code Playgroud)