在Swift 5.9中,有一个新的警告:
将“UnsafeRawPointer”构造为类型为“[T]”的变量;这可能不正确,因为“Element”可能包含对象引用。
因为T上没有类型强制,所以当我们传入引用类型值时,它会警告我们不安全的使用。
下面是我的代码:
func aFunc<T>(values: [T]) -> MTLBuffer {
let buffer = makeMTLBuffer()
let bufferPointer = buffer.contents()
memcpy(bufferPointer, values, size)
return buffer
}
有没有什么方法可以将T
指定为值类型,这样它就不会发出警告?我们有: AnyObject
来指定引用类型,但我找不到指定值类型的方法。
1条答案
按热度按时间mqkwyuun1#
注意:可以使类符合ValueType协议。在Swift中,协议并不排斥值类型或引用类型。
不幸的是,Swift的类型系统没有内置的支持来区分泛型约束中的值类型和引用类型,所以没有直接的方法来强制泛型类型参数必须是值类型。
使用
AnyObject
,你可以说只有类可以遵循这个协议,而结构体或枚举不能。