такой же, как предыдущий. Основное отличие состоит в том, что каждый раз, когда вы хотите получить доступ к значениям peopleArray, вам нужно будет поставить восклицательный знак, чтобы развернуть его значение. Нет никаких преимуществ / недостатков, просто логика использования опций. Если ваш массив может быть ноль и далее иметь значения или это статический массив ...

ел бы иметь массив в качестве члена моего контроллера табличного представления. Массив будет источником данных.

Каковы различия или преимущества / недостатки следующих способов иметь массив переменных-членов.

class BinViewController: UITableViewController, WKNavigationDelegate {
    var peopleArray1 = [String]()
    var peopleArray2: [String] = []
    var peopleArray3: [String]!
    var peopleArray4: [String]?
 rmaddy21 окт. 2017 г., 16:33
Это основной вопрос о Swift и объявлениях и инициализациях свойств. Вы прочитали книгу Свифта? Какие конкретные вопросы у вас есть по поводу этих четырех строк кода? Что именно вы не понимаете в их различиях? пожалуйстаредактировать Ваш вопрос (не оставляйте комментарии) с вашими разъяснениями.

Ответы на вопрос(2)

Эти два в основном делают то же самое:

var peopleArray1 = [String]()
var peopleArray2: [String] = []

Они объявляют и инициализируют пустой массив типа[String].

Эти два, с другой стороны, также похожи:

var peopleArray3: [String]!
var peopleArray4: [String]?

Сам массив для них обоих может бытьnil, которые они в настоящее время, как они объявлены.

Разница в том, чтоpeopleArray3 является неявно развернутым необязательным массивом строк, в то время какpeopleArray4 необязательный массив строк

Что это значит дляpeopleArray3 является то, что вы говорите компилятору, что вы установите его значение до его использования. Если вы попытаетесь получить к нему доступ, пока его значениеnilприложение вылетит.

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

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

var peopleArray1 = [String]() Вы говорите компилятору, пожалуйста, позвольте мне создать пустой массив строк.Это объявлено и инициализировано. Также вы позволяете компилятору выводить тип вашего массива по сравнению со вторым оператором.

var peopleArray2: [String] = [] это на 99% то же самое, что и ваше первое утверждение. Вы создаете пустой массив строк. Объявлен и инициализирован. Здесь единственная разница в том, что вы указываете тип вашего массива. Вы не позволяете компилятору определять тип вашего массива.var variable:TypeVariable = .... Apple рекомендует позволить компилятору выводить тип членов вашей переменной, когда вы можете, потому что вы выигрываете читаемый код

var peopleArray3: [String]! это сильно отличается от ваших предыдущих 2 инициализаций. Во-первых, вам нужно знать, чтоSwift - это язык со строгой типизацией, и вам нужно инициализировать каждую переменную перед его использованием. Одна вещь, которую вы можете поэкспериментировать, это попытаться сделать то же самое утверждение без! или же ? и вы получите ваш компилятор предупредил вас с проблемой. Иногда вы просто не знаете, каково начальное значение, но вы уверены, что в один момент у вас будет значение. Переменная - это два возможных состояния: никакое значение или значение не вызываютсяOptionals, С этим утверждением вы говорите, что я хочу создать массив строк, который может быть нулевым или иметь некоторые строковые значения. Если вы распечатаете свой массив, у вас будет сообщение типа «Необязательно ([String])». Чтобы получить значение вашего Optional, вам нужно развернуть его восклицательным знакомтолько когда вы уверены, что у вас есть ценность, Если нет, ваша программа будет зависать. Здесь с этой инициализацией вы говорите компилятору, чтобы он не беспокоился, потому что вы знаете, что в будущем ваш массив будет иметь некоторые значения.

var peopleArray4: [String]? такой же, как предыдущий. Основное отличие состоит в том, что каждый раз, когда вы хотите получить доступ к значениям peopleArray, вам нужно будет поставить восклицательный знак, чтобы развернуть его значение. Нет никаких преимуществ / недостатков, просто логика использования опций. Если ваш массив может быть ноль и далее иметь значения или это статический массив ...

Ваш ответ на вопрос