Я играл с CustomStringConvertible
для моего enum
на игровой площадке XCode, и я столкнулся с действительно странной проблемой.
См. Следующее enum
:
enum A {
case v(UInt8)
init(val: UInt8) {
self = .v(val)
}
}
var a = A(val: 5)
print("\(a)")
Этот код работаетбез проблем и a
будет равно .v(5)
.
После этого я попытался привести этот класс в соответствие с CustomStringConvertible
.Итак, я реализовал description
вычисляемое свойство:
enum A {
case v(UInt8)
init(val: UInt8) {
self = .v(val)
}
var description: String {
return "\(self)"
}
}
var a = A(val: 5)
print("\(a) \(a.description)")
и все же все работает как положено.Тогда я просто добавил соответствие протокола в объявлении:
enum A: CustomStringConvertible {
case v(UInt8)
init(val: UInt8) {
self = .v(val)
}
var description: String {
return "\(self)"
}
}
var a = A(val: 5)
print("\(a) \(a.description)")
Странно, но теперь я получаю ошибку сегментации.Несмотря на то, что я новичок в swift, я нахожу эту проблему забавной, и я никогда не видел, чтобы объявление соответствия протокола могло вызвать эту проблему.
Есть идеи, почему это происходит?