Свифт - более коротким способом написать прикрепленный код? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть следующий код:

class Device{
    var customerDeviceId:Int!
    var attribute:DeviceAttribute!
}

class DeviceAttribute{
    var customerDeviceId:Int!
}

class MainClass{
   var devices:[Device]!

   private func handleDeviceAttributes(_ attributes:[DeviceAttribute])  {
    for attribute in attributes {
        for device in devices {
            if device.customerDeviceId == attribute.customerDeviceId {
                device.attribute = attribute
            }
         }
      }
    }
 }

есть ли более короткий способ написать это? может быть, даже пропустить вложенные циклы?

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Вы можете использовать функциональный подход.

customerDevices.forEach { device in
    device.deviceAttribute = attributes.last(where: { $0.customerDeviceId == device.customerDeviceId })
}
1 голос
/ 18 марта 2019

Как-то так должно работать

customerDevices.forEach { (customerDevice) in
        customerDevice.deviceAttribute = attributes.compactMap({ (attribute) -> DeviceAttribute? in
            return attribute.customerDeviceId == customerDevice.customerDeviceId ? attribute : nil
        }).first
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...