在 swift 中发送 class 名称作为参数
send class name as parameter in swift
如何在 swift 中发送 class 名称作为参数?这是我想要实现的目标:
- 我有一个对象,我希望它采用 2 个不同的对象(对象 A、对象 B)作为其初始化程序的一部分。
- 此外,我需要确保两个对象都包含一个 UIImageView。
示例:
class A {
var view: UIImageView!
//rest of the code for object A
}
class B {
var imageView: UIImageView!
//rest of the code for object B
}
class C {
init(someClass1: AnyClass, someClass2: AnyClass) {
//make sure someClass1.imageView
//make sure someClass2.imageView
}
//rest of the code for object C
}
所以,基本上我需要发送那些 class names/types 来初始化 class C,并且 A 和 B 符合并有一个 UIImageView。我想它应该是类似协议的东西,但不确定如何在这里实现它。
谢谢!
有两种方法:协议或继承。协议通常是可行的方法,因为它们更灵活。 Objective C 中有大量的协议传统,因为该语言不支持多重继承,但 Swift 支持!选择协议或继承的原因在 Swift 中不是基于语言的,而是纯粹基于体系结构的,这很棒。因此,您应该根据应用的结构选择最佳方法。
使用协议:
// Any class conforming to the protocol P must
// have a property called view because it is not optional
protocol P {
var view: NSImageView? { get set }
}
class A: P {
var view: NSImageView?
// ...
}
class B: P {
var view: NSImageView?
// ...
}
class C {
init(someClass1: P, someClass2: P) {
if someClass1.view != nil && someClass2.view != nil {
// ...
}
}
}
使用继承:
// Parent class. Any subclass already includes all the
// properties and methods, so you don't have to redeclare them.
class P {
var view: NSImageView?
}
class A: P {
}
class B: P {
}
class C {
init(someClass1: P, someClass2: P) {
if someClass1.view != nil && someClass2.view != nil {
// ...
}
}
}
如何在 swift 中发送 class 名称作为参数?这是我想要实现的目标:
- 我有一个对象,我希望它采用 2 个不同的对象(对象 A、对象 B)作为其初始化程序的一部分。
- 此外,我需要确保两个对象都包含一个 UIImageView。
示例:
class A {
var view: UIImageView!
//rest of the code for object A
}
class B {
var imageView: UIImageView!
//rest of the code for object B
}
class C {
init(someClass1: AnyClass, someClass2: AnyClass) {
//make sure someClass1.imageView
//make sure someClass2.imageView
}
//rest of the code for object C
}
所以,基本上我需要发送那些 class names/types 来初始化 class C,并且 A 和 B 符合并有一个 UIImageView。我想它应该是类似协议的东西,但不确定如何在这里实现它。
谢谢!
有两种方法:协议或继承。协议通常是可行的方法,因为它们更灵活。 Objective C 中有大量的协议传统,因为该语言不支持多重继承,但 Swift 支持!选择协议或继承的原因在 Swift 中不是基于语言的,而是纯粹基于体系结构的,这很棒。因此,您应该根据应用的结构选择最佳方法。
使用协议:
// Any class conforming to the protocol P must
// have a property called view because it is not optional
protocol P {
var view: NSImageView? { get set }
}
class A: P {
var view: NSImageView?
// ...
}
class B: P {
var view: NSImageView?
// ...
}
class C {
init(someClass1: P, someClass2: P) {
if someClass1.view != nil && someClass2.view != nil {
// ...
}
}
}
使用继承:
// Parent class. Any subclass already includes all the
// properties and methods, so you don't have to redeclare them.
class P {
var view: NSImageView?
}
class A: P {
}
class B: P {
}
class C {
init(someClass1: P, someClass2: P) {
if someClass1.view != nil && someClass2.view != nil {
// ...
}
}
}