如何解决使用快速默认交换功能交换自定义类对象
我想在Swift 5.0中使用默认的交换功能
这是我写的
swap(&buyingCurrencyObj,&sellingCurrencyObj)
其中
var sellingCurrencyObj = SellingCurrency()
var buyingCurrencyObj = BuyingCurrency()
但它说
Cannot convert value of type 'SellingCurrency' to expected argument type 'BuyingCurrency'
BuyingCurrency()和SellingCurrency()是我的两个类,它们的功能相同但具有不同的参数。
open class SellingCurrency {
public init() { }
public var sellingCurrencyDisplayName:String?
public var sellingCurrencyActive:Bool?
public var sellingCurrencyCode:String?
public var sellingCurrencyTradingPlatformID:String?
public var sellingCurrencyID:String?
}
和
open class BuyingCurrency {
public init() { }
public var buyingCurrencyDisplayName:String?
public var buyingCurrencyActive:Bool?
public var buyingCurrencyCode:String?
public var buyingCurrencyTradingPlatformID:String?
public var buyingCurrencyID:String?
}
我想交换这两个类对象。 如何在自定义类对象上使用默认的Swap函数。
谢谢。
解决方法
swap
的输入参数的类型必须匹配。我建议创建一个通用的协议,两个类都要遵循该协议,然后将变量存储为协议。
protocol Currency {
var displayName: String? { get }
var active: Bool? { get }
var currencyCode: String? { get }
var tradingPlatformID: String? { get }
var currencyID: String? { get }
}
open class SellingCurrency: Currency {
public init() { }
public var displayName: String?
public var active: Bool?
public var currencyCode: String?
public var tradingPlatformID: String?
public var currencyID: String?
}
open class BuyingCurrency: Currency {
public init() { }
public var displayName: String?
public var active: Bool?
public var currencyCode: String?
public var tradingPlatformID: String?
public var currencyID: String?
}
var buyingCurrency: Currency = BuyingCurrency()
var sellingCurrency: Currency = SellingCurrency()
swap(&buyingCurrency,&sellingCurrency)
对代码的一些一般改进:
- 使用类型名称为变量名加上前缀不会增加任何值,但会使可读性大大降低,因此我强烈建议您不要这样做。
- 具有类型
Optional
的所有属性通常是一种繁琐的代码气味-仅使属性Optional
确实需要Optional
。
由于SellingCurrency
和BuyingCurrency
都具有相同类型的数据,因此您可以简单地创建一个分别代表它们的单个class
,而不必使用2种单独的类型,
open class Currency {
public var displayName:String?
public var active:Bool?
public var code:String?
public var tradingPlatformID:String?
public var ID:String?
}
现在,创建2个Currency
类型的实例-一个用于购买,另一个用于出售,
var sellingCurrencyObj = Currency()
var buyingCurrencyObj = Currency()
接下来,在上述实例上使用swap(_:_:)
操作
swap(&sellingCurrencyObj,&buyingCurrencyObj)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。