Предоставляет ли Swift официальную поддержку Design by Contract? Я понимаю, что это можно сделать во время выполнения через утверждения, но может ли это быть сделано во время компиляции? Или есть ли какие-либо внешние плагины/библиотеки, которые это делают?
ИЗМЕНИТЬ
Говоря "во время компиляции Design by Contract", я не хочу, чтобы библиотека была всем мощным статическим анализатором, который имеет С#. Мне было бы достаточно, если бы это было похоже на то, что iContract предоставляет Java. Давайте посмотрим на пример:
Код DBC для оценки квадратного корня в Java с использованием iContract может быть записан как:
/**
* @pre f >= 0.0
* @post Math.abs((return * return) - f) < 0.001
*/
public float sqrt(float f) { ... }
Теперь это сохраняет мой контракт как часть спецификации API, а не часть его реализации, которая, по моему мнению, является более чистым способом. Вызывающий должен знать, каковы его обязанности, а вызывающий настраивает свое ожидание, хотя и более четко. У нас есть что-то подобное в Swift?