根据3个int值显示字符串

时间:2018-09-16 18:57:51

标签: ios swift string string-formatting

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

x day, y hr, z min

其中x,y,z是用户的Int值,如果day和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"
}

但是,如果用户发送pickerTimeShow(天:0,时:2,分钟:0),我的字符串将显示

2 hr, 0 min

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

2 hr

此外,如果用户发送pickerTimeShow(天:5,小时:0,分钟:5),我的字符串将显示

5 day, 0 hr, 5 min

但我只想

5 day, 5 min

您有一个简单的解决方案来处理这种情况吗?除了添加更多的if语句进行检查之外,我真的什么也没想到,这使我的功能真的很长。非常感谢。

2 个答案:

答案 0 :(得分: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: ", ")
    }
}

测试

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"

答案 1 :(得分:4)

或者-如果您可以使用5 days而不是5 day-这是使用DateComponentsFormatter的解决方案

func pickerTimeShow(day: Int, hour: Int, minutes: Int) -> String? {
    let dateComponents = DateComponents(day: day, hour: hour, minute: minutes)
    let formatter = DateComponentsFormatter()
    formatter.unitsStyle = .short
    formatter.allowedUnits = [.day, .hour, .minute]
    return formatter.string(from: dateComponents)
}

如果输入为乱序,则该函数返回nil