Swift中是否有宣言
Is there a decltype equivalent in Swift?
在C 11和后者中,可以使用名为 decltype()
的语法等编译时函数来重复使用变量的声明类型,以声明另一个,而无需重写类型签名。Swift中是否有任何等效的句法工具?
c 示例:
class SomeClass {
public:
SomeVeryLongTypeName* my_prop;
}
void foo() {
SomeClass my_var = SomeClass();
// Below code is a variable declaration, not a function call
declytype(my_var.my_prop) some_prop = nullptr;
// Below is same as above
SomeVeryLongTypeName* some_prop = nullptr;
}
据我所知,在Swift中没有直接等效的句法工具。
对于某些略微相似的东西,您可以使用仿制药来访问(在编译时间)元类型(语法: metatype-type → type.Type
),以后您可以使用初始化器表达式来构造混凝土类型的实例(of元类型)。
protocol Initializable {
init()
}
typealias SomeVeryLongTypeName = Int
extension SomeVeryLongTypeName : Initializable {}
class SomeClass {
let my_prop : SomeVeryLongTypeName
required init() { my_prop = 1 }
}
func declmetatype<T: Initializable>(_: T) -> T.Type {
return T.self
}
func foo() {
let my_var = SomeClass()
let some_prop = declmetatype(my_var.my_prop).init()
some_prop = my_var.my_prop + 1
}
在上面的foo()
中,some_prop
是SomeVeryLongTypeName
类型(在这里仅是Int
),由于Swift的静态键入在编译时自然而然地知道。
注意,但是,在Swift中,我们不能仅使用此技术来声明类型,但也必须实例化它们。此外,在swift中没有"默认初始化器" (与默认的ctor:s in c 相比),因此需要将declmetatype(...)
中的通用类型持有人限制为我们自己的协议,我们向我们想从Metatype中使用的"默认意义"中使用某些初始化器。
我们可以访问语言参考 - 类型 - Metatypes,以获取有关Metatypes的其他详细信息,特别是:
使用initializer表达式构建一个类型的实例 从该类型的元类值。对于课堂实例,初始化器 这就是所谓的
required
关键字或整个关键字必须标记 标记为final
关键字的类。
我强调了用于构建类型的实例的可用使用(如上所示),但是,它并不能仅使用metatypes覆盖 neclare 类型。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- C/C++预处理器是否可以检测一些编译器选项
- Swift中是否有宣言