带有保留字的Swift Codable

时间:2018-07-05 13:13:44

标签: swift codable

我遇到的一种情况是,从API返回的JSON具有一个名为extension的字段,这是Swift中的保留字。尝试使用时,我的codable炸毁了。

我已经搜索了最近两个小时,但似乎找不到任何解决方案。

之前有人遇到过这个问题吗

public struct PhoneNumber: Codable {

    var phoneNumber: String
    var extension: String
    var isPrimary: Bool
    var usageType: Int
}

关键字“扩展名”不能在此处用作标识符

2 个答案:

答案 0 :(得分:4)

只需在变量名称中添加反引号即可使编译器认为它是变量,而不是关键字。

var `extension`: String

答案 1 :(得分:4)

“退货”也有类似的问题。您可以使用CodingKeys。

class InputField extends React.Component{
  handleChange = (event)=> {
    const val = event.target.value;
    this.props.onChange(this.props.id , val);
  }

  render() {
    return(
      <div>
        <input type="text" onChange={this.handleChange} value={this.props.value}/>
        <br/><br/>
      </div>
    );
  }
}       


class FormEditorParent extends React.Component {
  state = {};
  handleFieldChange = (inputFieldId , inputFieldValue) => {
    this.setState({[inputFieldId]:inputFieldValue});
  }
  //on Button click simply get the state of the input field
  handleClick = ()=>{
    console.log(JSON.stringify(this.state));
  }

  render() {
    const fields = this.props.fields.map(field => (
      <InputField
        key={field}
        id={field}
        onChange={this.handleFieldChange}
        value={this.state[field]}
      />
    ));

    return (
      <div>
        <div>
          <button onClick={this.handleClick}>Click Me</button>
        </div>
        <div>
          {fields}
        </div>
      </div>
    );
  }
}

const App = () => {
  const fields = ["field1", "field2", "anotherField"];
  return <FormEditorParent fields={fields} />;
};

ReactDOM.render(<App/>, mountNode);

由于您不能将属性称为“扩展名”,因此您将其命名为相似的名称,但是使用CodingKeys告诉您对象JSON中的键是什么。