2016-11-02 5 views
3

У меня есть классSwift 3, настройте оператор равенства = =? (Не равенство, «==»)

public class Thing 

как этот

var blah:Thing 
blah.name = "text" 

мне пришло в голову, что было бы замечательно, если бы я только мог «отменить знак равенства» , когда элемент справа является строкой.

Тогда вы могли бы

var blah:Thing 
var x:Thing 

blah = "text" // Swift knows I mean blah.name = "text" 
blah = x  // Swift knows I mean blah becomes x as normal 

Я пропускаю что-то очевидное? Как сделать?

Обратите внимание, что вы можете, конечно, взять на себя операцию подстроки, используя public subscript , что является фантастическим. Можете ли вы взять знак равенства «=» равным?

+3

Вы ищете следующее: [Быстрая инициализация структуры, создающая еще одну структуру типа String] (http://stackoverflow.com/questions/40373776/swift-struct-initialization-making-another-struct-like-string)? - (Но вы не можете переопределить оператор '='.) –

+3

[как перегрузить оператор присваивания в swift] (http://stackoverflow.com/questions/29964177/how-to-overload-an-assignment-operator -в-скор). –

+0

@MartinR - невероятно. Это потрясающе для инициализации !!!! – Fattie

ответ

3

You can't override the = operator in Swift:

Примечание

Маркеры =, ->, //, /*, */, ., операторы префикс <, & и ?, оператор инфиксным ?, и операторы постфикса >, ! и ? зарезервированы. Эти токены не могут быть перегружены, а также не могут использоваться как пользовательские операторы .

Это можно сделать на C++, главным образом из-за необходимости использования ручного управления памятью. Благодаря ARC, это не обязательно в Swift, и это просто добавит ненужный дым и зеркала к вашему коду, со всеми видами запутанного неявного поведения.

+0

Получил это - и спасибо! – Fattie

Смежные вопросы