我正在尝试JavaScriptCore和JSValue.toObjectOfClass
。我的问题是,鉴于以下代码,为什么ofObjectToClass
返回nil
而不是我的Pet
类的实例?
注意:这是一个精简的示例,它模拟了我试图使用更大的代码库进行的操作。请原谅它的简单性质,并随时了解ofObjectToClass
的内部工作原理。似乎很少有关于它的信息。
这是我正在使用的代码-您可以将其直接放到Swift Playground中并自己尝试:
import JavaScriptCore
let javascript = """
var Pet = (function() {
function Pet(name) {
this._name = name;
}
Object.defineProperty(Pet.prototype, 'name', {
get: function () {return this._name;},
set: function (name) {this._name = name;}
});
return Pet;
})();
var fetchPet = function(name) {
return new Pet(name);
}
"""
@objc public class Pet: NSObject, JSExport {
public var name: String?
}
let context = JSContext()!
context.evaluateScript(javascript)
let fcn = context.objectForKeyedSubscript("fetchPet")!
let petValue = fcn.call(withArguments: ["Fido"])
print("petValue.name is \(petValue?.forProperty("name")?.toString() ?? "???")")
if let petObj = petValue?.toObjectOf(Pet.self) as? Pet {
print("pet.name is \(petObj.name)")
}
else {
print("pet is nil :(")
}
这是我得到的输出:
petValue.name is Fido
pet is nil :(
以及我期望的输出:
petValue.name is Fido
pet.name is Fido
感谢您的光临,祝您周末愉快!
编辑:我知道Apple文档指出:“ ...如果无法将值转换为预期的类,则为零。我追求为什么。
答案 0 :(得分:0)
为什么> a = -1.28799
> L = -43.95321
> (1 - 0.25^(1/a))*L
[1] 84.99999
> (1 - 0.75^(1/a))*L
[1] 11.00005
返回ofObjectToClass
而不是我的nil
类的实例?
因为您的JavaScript类Pet
与您的Swift类Pet
无关。
您需要显式导出Swift类Pet
:
Pet