Вот улучшения, которые я бы сделал:
Во-первых, вы должны удалить ненужные скобки вокруг предикатов if
.Вы можете привыкнуть к ним из других C-подобных языков, но в Swift они просто шумовые.
Во-вторых, вам следует заменить конкатенацию строк (+
) интерполяцией.У него гораздо более быстрое время компиляции (вывод типа оператора существенно замедляет компилятор), и скоро (с переработкой интерполяции строк) будет иметь лучшую производительность во время выполнения (без избыточного выделения строк).
Далее я бы использовал Optional.map
, чтобы построить все части предложения, которые являются необязательными.Затем я бы по умолчанию присвоил им пустую строку, если они nil
.
Затем я бы взял все сегменты строки и соединил их вместе с пробелом в качестве разделителя:
struct Student {
var name: String
var id: String
var mentor: String?
var grade: String?
}
extension Student: CustomStringConvertible {
var description: String {
let start = "Student info:"
let nameSegment = "name: \(self.name)"
let idSegment = "id: \(self.id)"
let mentorSegment = self.mentor.map { "mentor: \($0)" } ?? ""
let gradeSegment = self.grade.map { "grade: \($0)" } ?? ""
return [start, nameSegment, idSegment, mentorSegment, gradeSegment].joined(separator: " ")
}
}
print(Student(name: "Bob", id: "id123", mentor: "Mr. Mentor", grade: "123"))
// => Student info: name: Bob id: id123 mentor: Mr. Mentor grade: 123