Entry tags:
Проверяем идею: SwiftUI поверх Си++
Решил на практике проверить идею насчёт лёгкости привинчивания оконного интерфейса Swift к коду Си++. Взял модель калькулятора TI-2500 и быстренько состряпал к ней простой гуй. Благо, SwiftUI позволяет обходиться даже без XCode IDE. Достаточно простого текстового редактора и компиляции из командной строки.
Собирается и запускается это дело так:

Сравниваем с оригиналом:

Исходники главного окошка: ContentView.swift. Всё довольно просто. На самом деле, сильно помогла книжка. Как в том анекдоте: "купил англо-русский словарь и выучил англо-русский язык". 😀
Собственно стык с Си++, файл ModelProxy.swift:
Собирается и запускается это дело так:
Вот такая загогулина получается:git clone https://github.com/sergev/ti-2500-datamath.git
cd ti-2500-datamath/swiftui
swift build
swift run

Сравниваем с оригиналом:

Исходники главного окошка: ContentView.swift. Всё довольно просто. На самом деле, сильно помогла книжка. Как в том анекдоте: "купил англо-русский словарь и выучил англо-русский язык". 😀
Собственно стык с Си++, файл ModelProxy.swift:
Главное типы правильно преобразовать: свифтовый Character в сишный char, а потом сишный std::string в свифтовый String.import Foundation
import ModelCxx
class ModelProxy: ObservableObject {
@Published var display: String = ""
static let shared = ModelProxy()
// Allocate C++ object.
private var calc = Calculator()
// Show initial display contents.
func setup() {
calc.run()
display = String(calc.get_display())
}
// Press key.
func send(_ ch: Character) {
calc.press_key(CChar(ch.asciiValue!))
display = String(calc.get_display())
}
}