在下面的示例中,我正在构建一个处理未知对象类型的协议,我所知道的是该类型可以是3 - Hello
2 - Hello
1 - Hello
或$sql = "SELECT id, msg FROM messages ";
$result = $conn->query($sql);
if ($result->num_rows > 0)
{
while($row = $result->fetch_assoc())
{
echo " " . $row["id"]. " - " . $row["msg"]. "</br>";
}
}
或完全不同的类{{1 }}。我想通过添加扩展来支持这些不同的类型类。至少那就是我认为正确的方法:
String
这是我想要实现的目标,但是我不可能解决两种类型的Int
。
我未知Resource
属性类型。有什么好方法吗?
答案 0 :(得分:1)
我想我有解决您问题的方法。您可以这样操作:
public class AbstractBase<T> {
public var item: T?
public init(_ i : T) {
item = i
}
public func about() {
print("Any")
print(self.item)
}
}
public extension AbstractBase where T == Int {
public func about() {
print("Int")
print(self.item)
}
}
public extension AbstractBase where T == String {
public func about() {
print("String")
print(self.item)
}
}
然后
AbstractBase("string").about()
AbstractBase(4).about()
将在控制台中为您提供
String
Optional("string")
Int
Optional(4)
任何其他类型都将转到AbstractBase
about()实现。
当然,编译器必须在编译时知道类型。如果您在运行时需要这种类型的识别,我认为强制转换是唯一的方法。
希望它能对您有所帮助。