当前位置: 首页 > 面试题库 >

Apple Swift:类型转换泛型

殷建弼
2023-03-14
问题内容

我正在编写一些Swift代码,其中有一个包含通用类型的数组:

let _data: Array<T> = T[]()

稍后在我的代码中,我需要确定html" target="_blank">存储在数组中的类型。我尝试使用文档中描述的类型转换技术(尽管泛型没有使用过)。

switch self._data {
case let doubleData as Array<Double>:
  // Do something with doubleData
case let floatData as Array<Float>:
  // Do something with floatData
default:
  return nil // If the data type is unknown return nil
}

上面的switch语句在编译时导致以下错误:

  1. 发出IR SIL功能@ _TFC19Adder_Example
    Mac6Matrix9transposeUS
    7Element
    fGS0_Q__FT_GSqGS0_Q___以便在/code.viperscience/Adder/src/Adder
    Library / Matrix.swift:45:3:0的’transpose’错误:无法执行命令:分段错误:11:0:错误: swift
    frontend命令由于信号失败(使用-
    v查看调用)命令/Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift失败,退出代码254

有人知道我可以将通用数据转换为实际类型以采取特定措施吗?


问题答案:

假设您有一系列按钮:

let views: [NSView] = [NSButton(), NSButton(), NSButton()]

您可以使用以下强制转换:

let viewsAreButtons = views is [NSButton]  // returns true
let buttonsForSure = views as! [NSButton]  // crashes if you are wrong
let buttonsMaybe = views as? [NSButton]    // optionally set

如果您尝试在如下所示的开关盒中使用,它将无法正常工作。编译器(Swift 1.2 Xcode
6.3b1)说:“不能使用[NSButton]类型的下行模式。”

switch views {
  case let buttons as [NSButton]:
    println("Buttons")
  default:
    println("something else")
}

称之为限制。用例归档雷达。Swift团队真的很想听听反馈。如果您真的想使其工作,可以定义自己的模式匹配运算符。在这种情况下,将是这样的:

struct ButtonArray { }
let isButtonArray = ButtonArray()

func ~=(pattern: ButtonArray, value: [NSView]) -> Bool {
    return value is [NSButton]
}

然后工作:

switch views {
  case isButtonArray:
      println("Buttons")    // This gets printed.
  default:
     println("something else")
}

在操场上尝试一下。希望能帮助到你!



 类似资料:
  • 我想说得具体一点。我有一个名为Result的类和一个名为Result的派生类 这些类在方法中用作返回类型。为此,我创建了这个helper类: 正如您所看到的,上面的代码对于成功有两种返回类型,一种是如果您不想返回任何东西,另一种是如果您想返回一些东西,但是失败的结果永远不会返回什么东西。这是不必要的,只是一个错误消息。这使我想到以下问题:当我想创建一个可以使用返回类型返回Success,而不使用返

  • 我在我的一个实用程序类中有一个方法,它接受一个集合和一个类对象,并返回一个Iterable实例,该实例可以遍历作为指定类实例的集合的所有成员。其签名为: 这对于大多数用例都非常有效,但现在我需要将其与泛型类

  • 在下面来自的语法中,泛型类型参数在实例化原始类型数组后用于类型转换,

  • 我正试图解决一个泛型问题。我在做一些手工选角,感觉好像我做错了什么。我对使用泛型有点陌生,所以很有可能我在某些方面误用了它们。如能提供指导,将不胜感激。 TLDR: 我有一个带有泛型方法的接口,该泛型方法采用参数。我在一个类中实现了这个接口,但在实现器中,我希望确保是特定类型的(假设,这样我就可以提取一些字段)。我怎么能那样做? 详细信息: 下面有一个接口和一个实现类,其中。 具有以下定义: 而具

  • 问题内容: 我目前正在尝试从书中学习如何使用泛型。在本章中,它说取一条数据T并将其转换为整数。我正在Eclipse中尝试不同的方法,但是似乎都不允许这样做。您如何执行以下任务: 然后在另一个类中: 我已经尝试使用和其他一些东西,但似乎没有什么能使Java满意。本书坚持要保持方法的通用性,以防使用浮点数或双精度数代替字符串或整数。 编辑:对于其他人可能有类似的问题。从对这个问题的所有评论和被接受的答

  • 我有一个类似于Pairs的类。我有一个特性,可以将这个类转换成Json格式。 当我使用这个特性时,我得到了以下错误,即对于