Я новичок в Swift, поэтому, пожалуйста, дайте мне знать, если я пропустил что-то болезненное очевидное.У меня есть class
, который я хочу передать по значению для перегрузки оператора +
.
Код не будет работать, если я определю левый аргумент lhs
как foo
, но тогда этонеизменяемый, и будет работать, если lhs
равен inout foo
, но тогда я изменил lhs
, что мне явно не нужно.
Быстрый анализ моего класса:
class foo<T: Numeric> {
/* Data */
/* Init Fn */
/* += definition */
static func + (lhs: foo, rhs: foo) -> foo {
do {
try lhs += rhs
return lhs
} catch {
/* Error Handling */
}
}
}
Я пришел из C ++, поэтому я удивлен, что не могу передать объект по значению, если я выберу.После вопроса Каковы основные правила и идиомы для перегрузки операторов? , в C ++ этот метод перегрузки будет ожидать, что левый аргумент будет передаваться по значению, а правый аргумент будет передаваться const &
, как показано ниже, но здесь у меня, кажется, нет этой опции.
class X {
/* In Swift operators are not defined internally like this */
X& operator+=(const X& rhs) {
// actual addition of rhs to *this
return *this;
}
};
inline X operator+(X lhs, const X& rhs) {
lhs += rhs;
return lhs;
}
Есть ли способ, о котором я не знаю, или перегрузка выполняется по-другому в Swift?
Любая помощьбудет принята с благодарностью.