Вот вы говорите, что title
(и другие свойства) может или не может иметь значение:
var title:String?
Тогда здесь вы пытаетесь использовать значение title
:
var postEventData = [
"title": self.title,
"description":self.eventDescription,
"duration":self.duration,
"host":self.hostID,
"category":self.category
]
Вам нужно решить, что вы хотите сделать, если title
не имеет значения. Должно ли создаваться postEventData
? Должны ли они использовать значения по умолчанию? Теоретически вы можете создать словарь [String : String?]
, но это вообще не полезно (поскольку выборка из словарей уже возвращает необязательный).
У вас есть несколько вариантов здесь, в зависимости от того, что вы хотите для этой структуры данных.
Сделайте свои объекты не факультативными. Действительно ли это нормально, что эти свойства не имеют ценности? Возможно, они должны по умолчанию быть ""
, а не быть необязательными. позволяют
Только createEvent()
если все свойства установлены (я переписан createEvent
возвращать значение, потому что ваш текущий код просто создает переменную, а затем выбрасывает его, так что я не был уверен, что цель была):
func createEvent() -> [String: String] {
if let title = self.title,
description = self.eventDescription,
duration = self.duration,
host = self.hostID,
category = self.category {
return [
"title": title,
"description": description,
"duration": duration,
"host": host,
"category": category
]
}
return nil
}
- Использовать значения по умолчанию, если свойства не установлены:
func createEvent() -> [String: String] {
return [
"title": self.title ?? "",
"description": self.eventDescription ?? "",
"duration": self.duration ?? "",
"host": self.hostID ?? "",
"category": self.category ?? ""
]
}
- Или спросите себя, почему вы создаете словарь. Для этого у вас уже есть структура данных; вам действительно нужно его преобразовать?
В качестве побочного примечания нет причин для ваших методов set...
. Префикс set
имеет особое значение в Swift. Вызывающий должен просто сказать event.title = ...
. Если вам нужна какая-то специальная обработка сеттера, используйте опцию set
, чтобы определить ее на свой объект.
Благодарим вас за это объяснение, очень кратким и понятным. – jshah
"title": self.title ?? "", развернуть значение self.titles, если оно объявлено как 'String?' – jshah
Да, но лучше подумать об этом, так как принимает значение self.title, если оно есть, в противном случае берет значение следующего операнда. Я думаю, что люди слишком увлекаются «разворачиванием». –