Estoy tratando de traducir javascript a swift. Este es el método 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; }Lo he traducido en rápido como a continuación:
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 } Recibo el error en esta línea: guard let propertiesJson = properties else { return data } ¿La traducción es correcta o me falta algo?
La traducción más simple de este TypeScript a Swift se verá así:
func serializeProperty(properties: Dictionary<Key, Value?>) -> Array<(Key, JsonValue?)> { let processedData = properties.map() { key, value -> (Key, JsonValue?) in if let value = value { return (key, serializeValue(value: value)) } return (key, nil) } return processedData } Tenga en cuenta el uso de (Key, JsonValue?) entre paréntesis regulares para indicar una tupla de Key y JsonValue? , haciendo coincidir la notación TypeScript de [Key, JsonValue | null] . También tenga en cuenta que tanto en las implementaciones de TypeScript como de Swift, el parámetro de properties es un tipo que no acepta valores NULL, por lo que no es necesario verificar null / nil .
Usando una cláusula de protección y devolviendo el resultado de properties.map() directamente, esto se puede simplificar aún más a:
func serializeProperty(properties: Dictionary<Key, Value?>) -> Array<(Key, JsonValue?)> { return properties.map() { key, value in guard let value = value else { return (key, nil) } return (key, serializeValue(value: value)) } }Volviendo al otro lado, la implementación de TypeScript también se puede simplificar de manera similar a:
function serializeProperty(properties: Map<Key, Value|null>): Array<[Key, JsonValue|null]> { return Array.from(properties.entries()).map(([key, value]) => { if (value === null) { return [key, null]; } return [key, serializeValue(value)]; }); }