我已经创建了到 C 库的 Rust 绑定,目前正在围绕它编写安全包装器。
问题是关于接受 C 函数指针的 C 函数,而这些指针无法接受任何自定义用户数据。
用一个例子来解释更容易,
C 库:
// The function pointer I need to pass,
typedef void (*t_function_pointer_library_wants)(const char *argument);
// The function which I need to pass the function pointer to,
void register_hook(const t_function_pointer_library_wants hook);
Run Code Online (Sandbox Code Playgroud)
绑定:
// For the function pointer type
pub type t_function_pointer_library_wants = ::std::option::Option<unsafe extern "C" fn(argument: *const ::std::os::raw::c_char)>;
// For the function which accepts the pointer
extern "C" {
pub fn register_hook(hook: t_function_pointer_library_wants);
}
Run Code Online (Sandbox Code Playgroud)
如果我可以像下面这样向用户公开 api,那就太好了,
// Let's assume …
Run Code Online (Sandbox Code Playgroud) 我对 IOS 开发没有经验,但有一些基本的了解,可以通过阅读文档和教程来完成它。
我想从 Swift 调用 Objective C 代码并且它运行良好,现在我想做相反的事情并且有点困惑。
基本上,我首先在 SwiftUI 中的 Button 操作中调用 Objective C 函数,然后我希望该函数在同一个 SwiftUI 视图中更新 ObservedObject 并希望该视图重新呈现。
我已经找到并关注了一些关于它的资源,它们是
https://medium.com/@iainbarclay/adding-swiftui-to-objective-c-apps-63abc3b26c33
https://pinkstone.co.uk/how-to-use-swift-classes-in-objective-c/
Swift UI 视图看起来像
class Foo : ObservableObject {
@Published var bar = ""
}
struct ContentView: View {
@ObservedObject var baz = Foo();
// Then access later as self.baz.bar as a parameter somewhere..
Run Code Online (Sandbox Code Playgroud)
bar
在这里更新的正确方法是什么?
我做了正确的构建设置并添加了@objc
标签并导入了project_name-swift.h
. 实施并修改了https://medium.com/@iainbarclay/adding-swiftui-to-objective-c-apps-63abc3b26c33 中的示例,
但由于我在这些环境中缺乏经验,所以有点迷失。
也许有人可以将我推向正确的方向。
谢谢你。
假设我的项目名称是Project
.
示例代码:(与此非常相似的代码,编译良好,目标 C 函数调用,但在快速方面,我没有输出到控制台,文本也没有呈现。如果您指出我的错误,我将不胜感激,因为我很少参与 iOS 开发。)
内容视图.swift …
按照互联网上的建议,我将muted
和playsinline
属性添加到我的视频元素中。我仍然无法在 Safari 11 中获得愿景,但只有这个错误。我还尝试autoplay
从我的视频元素中删除。
Unhandled Promise Rejection: TypeError: Type error
是否可以webrtc
在 Safari 11 中工作,或者我是否在浪费时间?
getUserMedia()
适用于所有其他浏览器(Chrome、Firefox、Edge、Opera)。
谢谢!
我使用这个垫片,https://github.com/addyosmani/getUserMedia.js/blob/gh-pages/lib/getUserMedia.js这会返回一个成功回调,
然后在回调中,
var video = camOptions.videoEl; //the video element
var vendorURL = window.URL || window.webkitURL;
try {
video.src = vendorURL ? vendorURL.createObjectURL(stream) : stream;
}
catch(err) {
//HERE IS THE TYPE ERROR IN SAFARI
}
Run Code Online (Sandbox Code Playgroud) ffi ×1
getusermedia ×1
ios ×1
javascript ×1
libpd ×1
objective-c ×1
rust ×1
safari ×1
swift ×1
swiftui ×1
webrtc ×1