我想将一个类型数组传递给函数 - 但我不确定什么是Swift类型。
我们说我有两节课: MyClass和AnotherClass。 我想要一个像这样的数组[MyClass,AnotherClass]。 阵列的类型是什么?
答案 0 :(得分:1)
它是AnyClass
类型,它是所有对象类型的基础。
func checkClassTypes(types: [AnyClass]) {
types.forEach { type in
// Your custom classes don't necessarily have to subclass from NSObject.
print(type is NSObject.Type)
}
}
checkClassTypes([MyClass.self, AnotherClass.self])
答案 1 :(得分:1)
如果您只需要包含类类型,.txt {
padding: 12px 16px;
color:blue;
top:0;
-webkit-box-shadow: -10px 0 10px -2px #ffffff;
box-shadow: -10px 0 10px -2px #ffffff;
}
span:hover {
-webkit-box-shadow: none;
box-shadow: none;
}
将起作用:
AnyClass
如果您想要包含某些值类型,则可能需要使用class MyClass {
//...
}
class AnotherClass {
//...
}
let classTypes: [AnyClass] = [MyClass.self, AnotherClass.self]
或Any
:
Any.Type
但是,let types: [Any] = [Int.self, String.self, MyClass.self, AnotherClass.self]
let anyTypes: [Any.Type] = [Int.self, String.self, MyClass.self, AnotherClass.self]
,AnyClass
或Any
这三种类型都难以使用。您很快就会发现在数组中实例化一个类非常困难。
答案 2 :(得分:0)
我不确定我是否正确理解了关于Swift类型的问题,但Swift没有将Type指定为某种变量。 Swift定义代码中的变量可以有某种类型,可以是浮点数,字符串,整数等。当说Swift类型安全并推断出类型时,这意味着Swift要求你清楚存储在变量中的值的类型(类型安全),并且当您指定值(类型推断)时,Swift将尝试推断变量的类型。
变量的类型也可能更复杂,如枚举,结构或类。 Swift甚至将数组或其他集合视为类型。在这个意义上,Type可以被定义为一块存储器,其中存储常量或变量(或这些的集合)。一种类型可以是不同的东西。将Type作为常量/变量存储信息的好处是,我现在可以将变量的类型推迟到运行时,而不是我必须在我的代码中指定它。或者我可以指定泛型类型的结构,稍后我可以定义具有相同结构但具有不同类型的不同类型的变量。请阅读有关处理Apple的Swift编程语言类型的更详细信息。它是免费的,可以在iBooks商店下载。
现在回到你的[MyClass,AnotherClass]数组的第二个问题,有点像将数组的类型推迟到以后。您最初可以将您的数组定义为AnyObjects或更像swift的AnyClass数组,例如
myArray = [AnyClass]()
稍后您可以在该数组中放置不同类型的变量/对象,如Double,String或具有特定类的对象。
但是,建立这样的数组时应该小心。此数组不是类型安全的,您还没有指定某个索引处的对象类型。为了防止xcode在您的代码和程序出现问题时崩溃,您应该始终在数组中输入各个对象。例如
if let myObject = myArray[2] as? myClass { do something }
如果您没有对阵列进行类型转换,那么xcode和您的程序都会做出奇怪的事情。
我希望这能回答你的问题。
亲切的问候, MacUserT
答案 3 :(得分:-1)
我猜你真的想要创建两个类的实例数组,而不是类定义的数组。如果是这样,您将创建一个Any
或AnyObject
而非AnyClass
的数组。
class MyClass {
}
class OtherClass {
}
let m = MyClass()
let o = OtherClass()
let array1 = [m, o] as [Any]
// or
let array2 = [m, o] as [AnyObject]