So i've been trying to append an element to an array and am getting the error i mentioned in the title. Everything i've read says its from a mismatch of types but I can not figure out where this mismatch is coming from.
Here is where the warning is coming from. newValue is a BTDevice? and i'm unwrapping to BTDevice so that it may be added to $connectedDevices which is an array of BTDevice
.onChange(of: listener.connectedPublished) { newValue in
guard let device = newValue else {return }
appState.$connectedDevices.append(device) // warning on this line
doneLoading.toggle()
show.toggle()
let bool = isDoneSpeaker
self.isDoneOnboarding = bool
}
Here is the AppState
class AppState: ObservableObject {
@Published var selectedTab: ContentViewTab = .home
@Published var connectedDevices = [BTDevice]()
var devices: [BTDeviceHolderInfo]? {
get {
var newArray = [BTDeviceHolderInfo]()
if let data = UserDefaults.standard.data(forKey: UserDefaults.Key.identifierArray.rawValue) {
do {
let decoder = JSONDecoder()
let array = try decoder.decode([BTDeviceHolderInfo].self, from: data)
newArray = array
} catch {
return [BTDeviceHolderInfo]()
}
}
return newArray
}
}
@Published var newlyConnectedBass50: BASS50?
}
Here is where listener.connectedPublished is set
func didConnect(to device: BTDevice) {
self.canConnect = true
connectedPublished = device // RIGHT HERE
let holderInfo = BTDeviceHolderInfo(deviceId: device.uuid, rssi: device.rssi)
let haveSaved = self.onboardedDevices.contains { info in
return info == holderInfo
}
if !haveSaved {
do {
// Create JSON Encoder
let encoder = JSONEncoder()
// Encode Note
let data = try encoder.encode(holderInfo)
// Write/Set Data
UserDefaults.standard.set(data, forKey: UserDefaults.Key.identifierArray.rawValue)
} catch {
print("Unable to Encode Note (\(error))")
}
}
if let newDevice = BASS50(device.peripheral, device.advData, device.rssi) {
print("it's a new bass being added")
self.bass50 = newDevice
self.bass50?.state = .connected
}
}