我有以下 Swift 课程:
public class Tree {
var obj_ : OpaquePointer
public init(fromCPtr obj:OpaquePointer) {
obj_ = obj
}
convenience init(_ levels:Int32) {
var rv : OpaquePointer?
Tree_Tree_create(levels, &rv)
self.init(fromCPtr:rv!)
}
deinit
{
Tree_Tree_dispose(obj_)
}
}
Run Code Online (Sandbox Code Playgroud)
以及以下测试代码:
import Foundation
import Tree
let t = Tree(4)
print(t.data())
Run Code Online (Sandbox Code Playgroud)
我用以下命令编译 Tree 模块:
swiftc Tree.swift -import-objc-header Tree-Bridging-Header.h -L. -lTree_c -emit-module -emit-module-path build/Tree.swiftmodule -emit-library -module-name Tree -o build/Tree
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,不会出现错误或警告。
我用以下方法编译我的测试代码:
swiftc TestTree.swift -Ibuild/
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
TestTree.swift:4:14: error: cannot convert value of type 'Int' to expected argument type 'OpaquePointer'
let t = Tree(4)
Run Code Online (Sandbox Code Playgroud)
为什么 Swift 选择指针重载?据我了解,除非我调用 ,否则 Swift 不应该选择指针 init 方法init(fromCPtr some_pointer)。Tree(Int32(4))在测试中使用没有什么区别。
如何让 Swift 选择正确的 init 方法?
convenience init(_ levels:Int32) {
Run Code Online (Sandbox Code Playgroud)
这不是public初始化程序。添加public以使其在模块外部可见。默认访问级别为internal,仅在模块内部可见。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |