如何访问C属性?

时间:2014-06-13 19:58:05

标签: objective-c frameworks swift

我在swift代码中使用libxml2框架,并且不确定访问属性的正确语法是什么。

在Objective-C中,您可以使用以下命令访问该属性:

currentNode->name

但是当试图在Swift中使用相同的语法时,我得到了这个错误:

"支持的声明块是未使用的闭包"

我猜这是因为" - >"已被保留。

我也尝试过:

currentNode.name

但我收到错误:

"'的xmlNodePtr'没有名为' name'"

的成员

是否可以在Swift中访问C属性?

1 个答案:

答案 0 :(得分:5)

执行此操作的方法是使用memory类型的UnsafePointer变量。

为了加快速度,我首选的方法是定义一个自定义运算符来取消引用UnsafePointer类型:

operator postfix & { }

@postfix func &<T>(lhs: UnsafePointer<T>) -> T {
    return lhs.memory;
}

完成后,您可以执行以下操作:

let doc = xmlReadDoc(nil, "my-url", "UTF-8", 0);
let root = xmlDocGetRootElement(doc);

var currentChild = root&.children;
while (currentChild != nil) {
    var str = String.fromCString(UnsafePointer<CChar>(currentChild&.name));
    println("Child name: \(str)");

    currentChild = currentChild&.next;
}

如果您想允许链接,您甚至可以使结果返回可为空。