vak: (Default)
[personal profile] vak
Решил на практике проверить идею насчёт лёгкости привинчивания оконного интерфейса Swift к коду Си++. Взял модель калькулятора TI-2500 и быстренько состряпал к ней простой гуй. Благо, SwiftUI позволяет обходиться даже без XCode IDE. Достаточно простого текстового редактора и компиляции из командной строки.

Собирается и запускается это дело так:
git clone https://github.com/sergev/ti-2500-datamath.git
cd ti-2500-datamath/swiftui
swift build
swift run
Вот такая загогулина получается:

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



Исходники главного окошка: ContentView.swift. Всё довольно просто. На самом деле, сильно помогла книжка. Как в том анекдоте: "купил англо-русский словарь и выучил англо-русский язык". 😀  

Собственно стык с Си++, файл ModelProxy.swift:
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())
}
}
Главное типы правильно преобразовать: свифтовый Character в сишный char, а потом сишный std::string в свифтовый String.
From: [personal profile] h1uke
Насчет bloatware согласен, меня это тоже останавливало. Но потом стало понятно, что от этого рантайма не отвертеться.
Более того, с недавних пор это дело автоматически присутствует _во_всех_ копиях виндовс, ничего и устанавливать не надо.
Я экспериментировал с Windows 10 LTSC build 19041 от октябра 2020 года - там этот рантайм уже на месте.
Подозреваю, что в двух других операционках тоже так - раз уж GUI поддерживается, то и соответствующий Webkit на месте.

Впрочем, у меня случай специфический - GUI нужен для ~ двух десятков существующих/древних утилит, которыми пользуются исключительно внутри конторы, и исключительно виндовозники.
Эти компьютеры не жалко - там и без меня bloatware хватает.
Зато можно элементы ГУЯ, если не весь, кому-то поручить, поскольку любой шалопай нынче умеет малевать HTML-странички.

Собственно, я не спорю и не уговариваю, просто поболтать захотелось.