#javascript #swift #dictionary
Вопрос:
Это мой код:
override func style(node: Node) throws -gt; StyleNode { guard let objectNode = try super.style(node: node) as? StyleNode else { throw UEErrors.unrecoverableError(message: "Could not create Node") } guard let stylesArray = node.stylesMap else { throw UEErrors.unrecoverableError(message: "stylesMap is missing") } objectNode.stylesMap = stylesArray //error : Cannot assign value of type '[[StyleID : Style]]' (aka 'Arraylt;Dictionarylt;String, Stylegt;gt;') to type '[StyleID : Style]' (aka 'Dictionarylt;String, Stylegt;') return objectNode }
Примечание: var stylesMap: [[StyleID: Style]]?
Как мне создать словарь stylesArray
? (Я думаю, что карта в javascript-это словарь в swift)
Я пытаюсь перенести код javascript в swift. Ниже приведен код javascript:
static style( node: Node, baseProps: BaseConstructorProperties, ): this { const stylesArray = assertNonNull( Node?.stylesMap, 'stylesMap is missing', ); return new this({ ...baseProps, stylesMap: new Map(stylesArray), }); }
Комментарии:
1. В настоящее время у вас есть массив
[StyleID : Style]
, который вы пытаетесь установить в свойство, принимающее одно значение этого типа. Предположительно, вам нужно решить, какой товар вы хотите. Первый из них?2. @jnpdx да, первый
Ответ №1:
Если вам нужен только первый пункт, как указано в комментариях, вы можете заменить следующую строку:
objectNode.stylesMap = stylesArray
с:
guard let first = stylesArray.first else { throw UEErrors.unrecoverableError(message: "No items") } objectNode.stylesMap = first
Комментарии:
1. Если я хочу вернуть второе, я должен использовать stylesArray.last?
2. Если бы в нем было только два пункта, да. Или
stylesArray[1]
(убедитесь, что вы сначала не вышли за пределы длины массива-доступ по индексу приведет к сбою, если вы выйдете за пределы длины массива)3. Что, если я захочу вернуть диктофон?
4.
[StyleID : Style]
это словарь