В Kotlin, что это делает get () - PullRequest
       0

В Kotlin, что это делает get ()

0 голосов
/ 29 сентября 2018

Я новичок в Kotlin и задаюсь вопросом, что делает get() = login_email.txt.toString()?

Он устанавливает email String?

enter image description here

1 Ответ

0 голосов
/ 29 сентября 2018

get() и set(value) после поля означают объявление пользовательского геттера и / или сеттера.Вот базовый пример использования значений по умолчанию:

class Demo{
    var something: String
        get() = field
        set(value) {
            field = value;
        }
    constructor(something: String){
        this.something = something;
    }
}

Однако эти два являются избыточными.Они вам на самом деле не нужны, если вы не делаете с ними что-то особенное.Они автоматически добавляются для переменных, хотя это относится только к геттерам на val с (поскольку их нельзя изменить, у них нет сеттеров).

Строка, о которой вы спрашивали, - это пользовательский получатель.

get() // declares a custom getter
    = // if you don't know how this works, see my explanation below
    login_email.text.toString() // you should be familiar with this part already; gets the string value of the field

Если вы не знакомы с синтаксисом, это эквивалентно без =:

get(){
    return login_email.text.toString()
} 

, если у вас есть один возврат, вы можете заменить скобки ивернуть ключевое слово с =.Если это поможет вам запомнить, просто запомните альтернативу использованию = (тело + ключевое слово return)

TL; DR: , оно объявляет пользовательский установщик, который возвращает значениеTextView / EditText (не уверен, что это, вы не включили это в вопрос)


В вашем случае вы используете пользовательский метод получения или установки для обработки данных свойств.Сами поля на самом деле не содержат никаких данных, но у вас есть геттеры для другого объекта.

Возьмите это в качестве примера:

class Demo(private val someObject: MyCustomObjectWithSomeData){
    val text: String
        get() = someObject.text
    ... same for other stuff. Could also have setters, if the properties are mutable
}

Здесь объект является частным, но он может быть публичным или внутренним в этом отношении.

Kotlin довольно много поддерживает спользовательские добытчики.Например, вы можете объявить поле для отображения определенных полей закрытой переменной.Например, в вашем случае у вас есть электронная почта.Это не обязательно должна быть переменная, поскольку у вас есть пользовательский метод получения, а поле не инициализировано.Если вы измените var email на val, вы можете сделать его ненулевым:

val email: String
    get() = login_email.text.toString()

Это также помогает с нулевой безопасностью.

А для поля error это немного сложнее.Это не может быть val, потому что вы объявляете пользовательский установщик, но если вы добавляете геттер, вы можете сделать его ненулевым:

var error: String
    get() = login_error.text.toString()
    set(value){
        login_error.text = value;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...