Jan 01, 1970
应用程序。它是开源的,并使用 Rust 库通过端到端加密的 Ockam 门户与您的朋友私下共享 Mac 上的 TCP 或 HTTP 服务。共享服务出现在他们的本地主机上!
brew install build-trust/ockam/portals
在 Swift 方面,我们可以直接调用 C API,但 C 数据结构并不是 Swift 中的一等公民。这使得它们更难在 SwiftUI 代码中惯用地使用。相反,我们选择复制 Swift 中的数据结构并在 C 和 Swift 之间进行转换。这可能看起来很麻烦,但实际上,共享状态不会经常改变。使用if let ...
、 ForEach
、 enum
等结构在 SwiftUI 中快速构建组件的能力非常有用,并且值得权衡。
// Rust idiomatic structure #[derive(Default, Clone, Debug, Eq, PartialEq)] pub struct LocalService { pub name: String, pub address: String, pub port: u16, pub shared_with: Vec<Invitee>, pub available: bool, } // Rust C-compatible structure #[repr(C)] pub struct LocalService { pub(super) name: *const c_char, pub(super) address: *const c_char, pub(super) port: u16, pub(super) shared_with: *const *const Invitee, pub(super) available: u8, } // Generated C header structure typedef struct C_LocalService { const char *name; const char *address; uint16_t port; const struct C_Invitee *const *shared_with; uint8_t available; } C_LocalService; // Swift idiomatic structure class LocalService { let name: String @Published var address: String? @Published var port: UInt16 @Published var sharedWith: [Invitee] @Published var available: Bool }
VStack(alignment: .leading, spacing: 0) { Text(service.sourceName).lineLimit(1) HStack(spacing: 0) { Image(systemName: "circle.fill") .font(.system(size: 7)) .foregroundColor( service.enabled ? (service.available ? .green : .red) : .orange) if !service.enabled { Text(verbatim: "Not connected") } else { if service.available { Text(verbatim: service.address.unsafelyUnwrapped + ":" + String(service.port)) } else { Text(verbatim: "Connecting") } } } ...