Может ли Swift структурировать самоуничтожение? - PullRequest
0 голосов
/ 19 марта 2019

Рассмотрим следующее:

struct MiniString {
    private(set) var value: String

    init(_ value: String) {
        if value.count < 17 {
            self.value = value
        } else {
            selfDeleteSomehow()
        }
    }
}

В другом месте это может быть реализовано так:

var ms: MiniString? = MiniString("This string is too long to be accepted")
print(ms) // prints 'nil'

Контекст: мой конкретный вариант использования для объявления функции в протоколе, который будет возвращать Double в диапазоне от 0,0 до 1,0, но не выше или ниже, что-то вроде:

protocol DoubleBetweenZeroAndOneProtocol {
    func getResult() -> DoubleBetweenZeroAndOne
}

1 Ответ

2 голосов
/ 19 марта 2019

Вы можете использовать неисправный инициализатор:

struct MiniString {

    var value: String { return value_ }

    private let value_: String

    init?(_ seedValue: String) {
        if seedValue.count < 17 {
            value_ = seedValue
        } else {
            return nil
        }
    }
}
...