领域对象的通用集合

时间:2016-10-05 00:26:43

标签: swift realm

我们发现我们的项目有许多围绕基本列表视图控制器的领域对象集合的重复/样板代码,并且想知道是否有一些通用容器可以封装它们。

似乎AnyRealmCollection与这个概念含糊不清,我发现这个old/spuriously sourced linkstackoverflow post基本上完全符合我的要求,但语法绝对没有'再工作了。我的目标基本上是以下(原谅我的伪代码)

class ParentController: UITableViewController {
  var dataSource: GenericRealmCollection!
  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataSource.count
  }
}

class ChildController: ParentController {
  func viewDidLoad() {
    dataSource = realm.objects(MyModel.self).filter(...)
  }
}

我猜这里有一些快速的类型擦除的东西我不能完全理解它会适应这种情况,但是我在下午的大部分时间都在玩它并没有取得多大进展。

更新1

根据@kishikawa-katsumi的解释,AnyRealmCollection看起来绝对不是我期待的。正如我在评论中提到的,这样做会强制类泛型,这实际上限制了与Obj-C的互操作性。我希望完全擦除类型(或者至少返回Object,然后在需要对象时使用辅助函数将其转换为正确的类型。看起来这可能是不可能的。

1 个答案:

答案 0 :(得分:0)

function calculate_aditional_fees( ) { if( !WC()->session->__isset( "reload_checkout" )) { $additional_price = get_option( 'additional_person_price' ); $additional_driver_price = get_option( 'additional_driver_price' ); $sum =0; foreach ( WC()->cart->cart_contents as $key => $value ) { if ( $additional_driver_price > 0 || $additional_price > 0 ) { $additional_price = get_option( 'additional_person_price' ); $additional_driver_price = get_option( 'additional_driver_price' ); $additional_price = floatval( $additional_price ) * intval( $value['additional-persons'] ); $additional_driver_price = floatval( $additional_driver_price ) * intval( $value['additional-drivers'] ); $sum += ( $additional_driver_price + $additional_price ) * WC()->cart->cart_contents[$key]['quantity']; } } WC()->cart->add_fee(__('Fee','woocommerce'),$sum); } } add_action( 'woocommerce_cart_calculate_fees', 'calculate_aditional_fees'); 按以下方式使用。

AnyRealmCollection<T>