Мое обходное решение:
function add(a, b, precision) {
var x = Math.pow(10, precision || 2);
return (Math.round(a * x) + Math.round(b * x)) / x;
}
precision относится к числу цифр, которые вы хотите сохранить после десятичной точки во время добавления.
Сам протокол не может быть одиночным. Это не имеет никакого смысла. Протокол - это то, что соответствует другим типам.
Но если вы хотите объявить, что все, что соответствует Singleton
, следуют некоторому правилу, например, предлагая sharedInstance
, тогда все в порядке. Ваш синтаксис просто неверен. Вы должны использовать var
с get
, а не let
.
protocol Singleton {
static var sharedInstance: Self { get }
}
В принципе, вы можете автоматически создать этот экземпляр, предоставив реализацию по умолчанию, но Swift не позволяет вам для создания хранилища в расширении. Хотя можно было бы снять это с каким-то глобальным кешем, трудно себе представить, что это стоит того.