Как извлечь соединение из функции с возвратом в swift? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь подключиться к моей умной лампе с помощью LIFXClient framework, но, к сожалению, я не понимаю, как использовать эту библиотеку. Библиотека выглядит очень просто, вот ссылка .

Я пытаюсь изменить цвет с помощью этой функции:

LIFXClient.connect(host: .ipv4(IPv4Address("192.168.1.4")!)).then { client in
    return client.light.setColor(color: .orange)
}

Но это создает новое соединение с другим локальным портом каждый раз, когда я его использую. Из-за отсутствия свободных портов после быстрой смены цветов я не могу установить новое соединение с лампой.

Я несколько дней пытался не создавать новое соединение, а использовать только одно, к сожалению, я не знаю, как это сделать.

Функция от LIFXClient для подключения к лампе:

public class LIFXClient: LIFXConnection {
    public class func connect(host: NWEndpoint.Host, port: NWEndpoint.Port = 56700, queue: DispatchQueue = DispatchQueue(label: "LIFX Queue"), source: UInt32 = UInt32.random(), target: UInt64 = 0) -> Promise<LIFXClient> {
        return NWConnection(host: host, port: port, using: .udp).connect(queue: queue).map { connection in
            return LIFXClient(connection: connection, source: source, target: target)
        }
    }
}

Если бы я только мог сохранить ссылку на client.light, это было бы здорово, но, к сожалению, я не смогу этого сделать:

var myClient: LIFXClient

LIFXClient.connect(host: .ipv4(IPv4Address("192.168.1.4")!)).then { client in
    myClient = client.light
    return client.light.setColor(color: .orange)
}

Разработчик этого фреймворка мне не пишет, и у меня действительно нет идей, как его решить. Большое спасибо за вашу помощь.

...