我遇到的一种情况是,从API返回的JSON具有一个名为extension的字段,这是Swift中的保留字。尝试使用时,我的codable炸毁了。
我已经搜索了最近两个小时,但似乎找不到任何解决方案。
之前有人遇到过这个问题吗
public struct PhoneNumber: Codable {
var phoneNumber: String
var extension: String
var isPrimary: Bool
var usageType: Int
}
关键字“扩展名”不能在此处用作标识符
答案 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中的键是什么。