【发布时间】:2021-11-01 23:51:06
【问题描述】:
我正在尝试将 javascript 翻译成 swift。这是javascript方法:
export function serializeProperty(
properties: Map<Key, Value | null>,
): Array<[Key, JsonValue | null]> {
const data = Array.from(properties.entries());
const processedData = data.map(entry => {
const [key, value] = entry;
if (value != null) {
return [key, serializeValue(value)];
}
return [key, null];
});
return processedData;
}
export function serializeValue(Value: Value): JsonValue {
if (Value.type === 'string') {
return {type: 'string', value: Value.value.toJson()};
} else if (Value.type === 'array_node') {
return {
type: 'array_node',
value: Value.value.map(node => node.toJson()),
};
}
return Value;
}
我已将其快速翻译如下:
func serializeProperty(properties: [Key: Value?]) -> [[Key: JsonValue?]]? {
var data: [[Key: JsonValue?]]?
guard let propertiesJson = properties else { return data }
for property in propertiesJson {
for item in property {
if let unwrappedValue = item.value {
properties[item.key] = try serializeValue(valueJson: unwrappedValue)
}
}
}
return data
}
我在这一行遇到错误:guard let propertiesJson = properties else { return data }
swift 的翻译是正确的还是我遗漏了什么?
【问题讨论】:
-
对于翻译,两个 sn-ps 之间的变量名称似乎不匹配
-
虽然我不了解 Swift,但我在您的翻译中缺少数组、元组或地图类型。
-
serializeValue(在 TypeScript 中)的定义是什么? -
@msbit 我已经用方法更新了问题
-
'guard let' 需要一个可选参数(因此出现错误)。您正在尝试将其与具有可选值的非可选字典一起使用。在你的 TypeScript 上,直到你在你的 map 函数中,你才做空检查。顺便说一句,Swift 也有地图。
标签: javascript swift swift-guard