I’ve a struct arrange for Messages and every time I received to load messages in app, I obtain an unexpectedly discovered nil error on this line of code –>
var chatPartnerId: String {
return isFromCurrentUser ? toID! : fromID! // the place I get the error
}
I can not determine what Im doing flawed right here in any respect.
This is the category setup:
struct Message: MessageType {
let id: String?
var messageId: String {
return id ?? UUID().uuidString
}
var content material: String?
var toID: String?
var fromID: String?
var isFromCurrentUser = Bool()
var chatPartnerId: String {
return isFromCurrentUser ? toID! : fromID!
}
let sentDate: Date
let sender: SenderType
var picture: UIImage?
var downloadURL: URL?
var sort: MessageKind {
if let picture = picture {
let mediaItem = ImageMediaItem(picture: picture)
return .picture(mediaItem)
} else {
return .textual content(content material ?? "")
}
}
init(person: Person, content material: String, fromID: String, toID: String) {
sender = Sender(senderId: person.uid!, displayName: person.identify!)
self.content material = content material
self.fromID = fromID
self.toID = toID
sentDate = Date()
id = nil
}
init(person: Person, picture: UIImage) {
sender = Sender(senderId: person.uid!, displayName: person.identify!)
self.picture = picture
content material = ""
fromID = ""
toID = ""
sentDate = Date()
id = nil
}
init?(doc: QueryDocumentSnapshot) {
let knowledge = doc.knowledge()
guard
let sentDate = knowledge["created"] as? Timestamp,
let senderId = knowledge["senderId"] as? String,
let fromID = knowledge["fromID"] as? String,
let toID = knowledge["toID"] as? String,
let senderName = knowledge["senderName"] as? String
else {
return nil
}
id = doc.documentID
self.sentDate = sentDate.dateValue()
sender = Sender(senderId: senderId, displayName: senderName)
self.isFromCurrentUser = fromID == Auth.auth().currentUser?.uid
if let content material = knowledge["content"] as? String {
self.content material = content material
downloadURL = nil
} else if let urlString = knowledge["url"] as? String, let url = URL(string: urlString) {
downloadURL = url
content material = ""
} else {
return nil
}
}
}
// MARK: - DatabaseRepresentation
extension Message: DatabaseRepresentation {
var illustration: [String: Any] {
var rep: [String: Any] = [
"created": sentDate,
"senderId": sender.senderId,
"fromID": fromID,
"toID": toID,
"senderName": sender.displayName
]
if let url = downloadURL {
rep["url"] = url.absoluteString
} else {
rep["content"] = content material
}
return rep
}
}
// MARK: - Comparable
extension Message: Comparable {
static func == (lhs: Message, rhs: Message) -> Bool {
return lhs.id == rhs.id
}
static func < (lhs: Message, rhs: Message) -> Bool {
return lhs.sentDate < rhs.sentDate
}
}