我有一个函数返回与日期匹配的st或th。我现在也希望用它返回月份。月份正确打印,但是当我尝试添加它以防它抛出此错误时,inOutString不能转换为String。
if let date = dateFormatterGet.date(from: date)
{
let monthString: String = dateFormatterMonthPrint.string(from: date)
print("This is month Str: \(monthString)")
var dateString = dateFormatterPrint.string(from: date)
switch (dateString) {
case "1" , "21" , "31": dateString.append("st") + "," + "\(monthString)"
case "2" , "22": dateString.append("nd")
case "3" ,"23": dateString.append("rd")
default: dateString.append("th")
}
return dateString
}
有人可以帮忙吗?
答案 0 :(得分:0)
错误在于:
case "1" , "21" , "31": dateString.append("st") + "," + "\(monthString)"
dateString.append
不会返回一个值。它只会改变(改变)dateString
。这意味着您可以在期望String
。
Swift有字符串插值,因此您根本不需要这些+
项内容,append
可以替换为+=
运算符:
case "1" , "21" , "31": dateString += "st, \(mothString)"
答案 1 :(得分:0)
答案 2 :(得分:0)
只需将右括号移动到行尾以连接文字字符串,然后附加结果并使用字符串从字符串创建字符串插值是多余的
case "1" , "21" , "31": dateString.append("st, " + monthString)
注意:
使用Calendar
和DateComponents
而不是使用(多个)日期格式化程序从日期获取日期组件。这样的效率更高,例如
let components = Calendar.current.dateComponents([.day, .month], from: date)
let day = components.day!
let month = components.month!
这两个值均为Int