对于Swift:参数类型'[String:ValueType]’不符合预期类型’AnyObject’感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于'string'类型的参数不能分配给'`
对于Swift:参数类型'[String:ValueType]’不符合预期类型’AnyObject’感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于'string' 类型的参数不能分配给 '`${string}` 类型的参数 | `${string}.${string}` | `${string}.${number}`'、c# – string.Equals(“string”)和“String”.Equals(string)有什么区别?、Flutter 2.0 迁移:_InternalLinkedHashMap
- Swift:参数类型'[String:ValueType]’不符合预期类型’AnyObject’
- 'string' 类型的参数不能分配给 '`${string}` 类型的参数 | `${string}.${string}` | `${string}.${number}`'
- c# – string.Equals(“string”)和“String”.Equals(string)有什么区别?
- Flutter 2.0 迁移:_InternalLinkedHashMap
不是 Map 类型的子类型?类型转换 - Flutter:面临这样的错误 - 参数类型 'Map
?'不能分配给参数类型 'Map '
Swift:参数类型'[String:ValueType]’不符合预期类型’AnyObject’
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData { return NSKeyedArchiver.archivedDataWithRootObject(dict) }
编译器给我传递dict作为参数的错误:
参数类型''[String:ValueType]’不符合预期类型’AnyObject’
编辑:
@ vadian的解决方案对我有用.
我还尝试将dict转换为NSDictionary:
return NSKeyedArchiver.archivedDataWithRootObject(dict as NSDictionary)
但是得到这个错误:
无法将''[String:ValueType]’类型的值转换为强制中的’NSDictionary’类型
为什么?
解决方法
func dataFromDict<ValueType>(dict: [String:ValueType]) -> NSData { return NSKeyedArchiver.archivedDataWithRootObject(dict as! AnyObject) }
'string' 类型的参数不能分配给 '`${string}` 类型的参数 | `${string}.${string}` | `${string}.${number}`'
如何解决''string'' 类型的参数不能分配给 ''`${string}` 类型的参数 | `${string}.${string}` | `${string}.${number}`''
我已将 react-hook-forms
从 v.6 迁移到 v.7。
更改register
方法后,如migration guide中指出的,出现如下错误:
''string'' 类型的参数不能分配给 ''${string}
类型的参数 | ${string}.${string}
| ${string}.${number}
''。 TS2345
注册需要一个字符串名称,我正确地提供了一个参数,它肯定是一个字符串,但无论如何它不接受我的参数,如果我不完全传递字符串。
非常感谢有类似问题或任何想法的任何人。提前致谢!
解决方法
react-hook-form
v7 中的
register()
不接受字符串,但字符串 literal。这是 register
的定义:
export declare type UseFormRegister<TFieldValues extends FieldValues> = <
TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
>(
name: TFieldName,options?: RegisterOptions<TFieldValues,TFieldName>
) => RefCallbackHandler;
TFieldName
是文字的联合。文字是特定的字段名称值。请参见下面的示例:
interface IFormValues {
firstName: string;
lastName: string;
}
const { register,handleSubmit } = useForm<IFormValues>();
const firstNameId = ''firstName''; // string literal
const lastNameId: string = ''lastName''; // string
return (
<form onSubmit={handleSubmit(onSubmit)}>
// this works because first argument is ''firstName'' | ''lastName''
<input {...register(firstNameId)} />
// this does not work because it''s just a string instead of one of the
// two literal values
<input {...register(lastNameId)} />
<input type="submit" />
</form>
);
解决方案
offical example 中提出的解决方案对我来说有点冗长,但目前有效。
您需要将寄存器名称转换为文字:
<input key={field.id} {...register(`test.${index}.test` as const)} />
但是,如果 index
是数字,则上述解决方案不起作用。当您将文字与数字混合时,如下所示:
`test.${index}.test`
因为 index
可以是任意数字,所以 typescript 无法将其强制转换为精确值。文档中提出的解决方法是手动转换为文字:
{...register(`test.${index}.test` as `test.0.test`)}
c# – string.Equals(“string”)和“String”.Equals(string)有什么区别?
string str = "abc"; if(str.Equals("abc"))
和
if("abc".Equals(str))
在第一行我调用字符串变量的equals方法来与字符串文字进行比较.第二行反之亦然.它只是编码风格的区别,或者编译器处理这两个语句的方式有所不同.
解决方法
override def Equals(that:String):Boolean //Should override Object.Equals if(that==null) return false for i from 0 to this.length if(!this(i).Equals(that(i))) return false return true
通常,该方法将检查该字符串是否为IS,并且该长度与该长度相同.
如其他人所指出的那样,如果该值为null,那么该方法返回false.另一方面,该方法是String的一部分,因此不能在null上调用.这就是为什么在你的exampleif中,str为null,你会得到一个NullReferenceException.
话虽如此,如果你知道这两个变量是非空字符串的长度相同,两个语句都将同时评估.
Flutter 2.0 迁移:_InternalLinkedHashMap 不是 Map 类型的子类型?类型转换
如何解决Flutter 2.0 迁移:_InternalLinkedHashMap<String,String?> 不是 Map<String,String> 类型的子类型?类型转换
我正在尝试将我的应用程序迁移到 Flutter 2.0。我已经完成了过渡。但是现在,我的 API 调用出现多个错误。在迁移之前,一切正常。
以下是我尝试从 API 获取文章时出现这些错误的示例。我有一个 JsonWebToken 来保护我的通话。
再一次,在迁移之前,一切都运行良好。有什么想法吗?
解决方法
看签名:
_InternalLinkedHashMap<String,String?>
Map<String,String>?
含义 headerJWT
要求第二个类型参数可以为空。
这会起作用:
void main() {
final Map<String,String?> foo = {};
foo as Map<String,String?>?;
}
但这不会:
void main() {
final Map<String,String>?;
}
Flutter:面临这样的错误 - 参数类型 'Map?'不能分配给参数类型 'Map'
如何解决Flutter:面临这样的错误 - 参数类型 ''Map<String, dynamic>?''不能分配给参数类型 ''Map<String, Object?>''
我正在练习 Flutter SQFLite。这就是我为用户信息创建模型的原因。这是我的模型代码-
class Contact {
static const tblContact = "contacts";
static const colId = "id";
static const colName = "name";
static const colMobile = "mobile";
Contact({
this.id,this.name = '''',this.mobile = '''',});
int? id;
String name;
String mobile;
Map<String,dynamic>? toMap() => {
"id": colId,"name": colName.toString(),"mobile": colMobile.toString(),};
factory Contact.fromMap(Map<String,dynamic> json) =>
Contact(name: json[colName],mobile: json[colMobile]);
}
然后我创建了一个数据库助手,用于从数据库中插入和获取数据。但是我在插入值时遇到了问题(不能将参数类型 ''Map
import ''dart:io'';
......
.......
class DatabaseHelper {
static const _databaseName = "ContactData.db";
static const _databaseVersion = 1;
//<====== Singleton Class
DatabaseHelper._();
static final DatabaseHelper instance = DatabaseHelper._();
Database? _database;
Future<Database?> get database async {
if (_database != null) {
return _database;
} else {
_database = await _initDatabase();
return _database;
}
}
//CREATE DATABASE
_initDatabase() async {
Directory dataDirectory = await getApplicationDocumentsDirectory();
String dbPath = join(dataDirectory.path,_databaseName);
print(dbPath);
return await openDatabase(dbPath,version: _databaseVersion,onCreate: _onCreate);
}
//CREATE TABLE
_onCreate(Database db,int version) async {
db.execute(''''''
CREATE TABLE ${Contact.tblContact}(
${Contact.colId} INTEGER PRIMARY KEY AUTOINCREMENT,${Contact.colName} STRING NOT NULL,${Contact.colMobile} STRING NOT NULL
);
'''''');
print("Done on Create");
}
//<=================== ADD DATA
Future<int> insertContact(Contact contact) async {
Database? db = await database;
return await db!.insert(Contact.tblContact,contact.toMap());
}
//<==================== Read Data
Future<List<Contact>> fetchContacts() async {
Database? db = await database;
List<Map<String,dynamic>> contacts = await db!.query(Contact.tblContact);
print("Done Fetch");
return contacts.length == 0
? []
: contacts.map((x) => Contact.fromMap(x)).toList();
}
}
错误:
我的问题在哪里,我错过了什么?请有人帮我解决这个问题。
更新:
我更改了参数类型“Map
The argument type ''Map<String,dynamic>?'' can''t be assigned to the parameter type ''Map<String,Object?>''.
最近的错误:
解决方法
您收到此错误是因为在插入函数中,地图类型为 <String,Object?
> 并且您正在传递类型为 <dynamic,dynamic>
的地图。尝试改变
Map<dynamic,dynamic>? toMap() => {
"id": colId,"name": colName.toString(),"mobile": colMobile.toString(),};
factory Contact.fromMap(Map<dynamic,dynamic> json) =>
Contact(name: json[colName],mobile: json[colMobile]);
到
//You don''t need to pass id because it''s auto incremented
[ 为空安全使用 Map<String,Object?>
而不是 Map<String,Object>?
]
,
Map<String,Object?> toMap() => {
"name": colName.toString(),};
factory Contact.fromMap(Map<String,Object?> json) =>
Contact(name: json[colName],mobile: json[colMobile]);
你的数据库说他想要一张像
Map<String,Object>
这里地图的键必须是 String
并且您正在传递带有 dynamic
类型密钥的地图
因此将地图的键从 dynamic
更改为 String
更改此地图类型
Map<dynamic,};
到
Map<String,};
之后你会得到另一个error
喜欢
The argument type ''Map<String,dynamic>?'' can''t be assigned to the parameter type ''Map<String,Object?>''.
现在首先我们必须明白 Map<String,Object?>
是什么意思?
类型 Object
是您的地图值必须是特定类型的数据,例如 int
double
String
或任何 Custom Object
因为 SQL 数据库将数据存储在列和每列必须保持特定的数据类型,所以试试这样
,
Map<String,Object>? toMap() => {
"id": colId,};
改变
Map<dynamic,};
到
Map<String,};
今天的关于Swift:参数类型'[String:ValueType]’不符合预期类型’AnyObject’的分享已经结束,谢谢您的关注,如果想了解更多关于'string' 类型的参数不能分配给 '`${string}` 类型的参数 | `${string}.${string}` | `${string}.${number}`'、c# – string.Equals(“string”)和“String”.Equals(string)有什么区别?、Flutter 2.0 迁移:_InternalLinkedHashMap
本文标签: