我有一个用Swift编写的UIViewController子类,叫做'BaseViewController'.我现在有一个名为'ViewController1'的'旧'视图控制器,用Objective-C编写,我想从'BaseViewController'继承.按照其他建议我导入了'Project-Swift.h'头文件.
像这样子类化时我的问题出现了
#import <UIKit/UIKit.h>
#import "MyProject-Swift.h"
@interface ViewController1 : BaseViewController
@end
Run Code Online (Sandbox Code Playgroud)
错误是:
不能使用objc_subclassing-restricted属性对类进行子类化
它出现在@interface ...行上.
假设我有两个表:users和orders.用户有很多订单,所以我的订单表中自然会有一个外键user_id.
rails中的最佳实践(速度,样式和参照完整性)是什么,以确保删除用户时,所有相关订单也会被删除?我正在考虑以下选项:
案例1. :dependent => :destroy在用户模型中使用
案例2.在postgres中定义表顺序并写入
user_id integer REFERENCES users(id) ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
我有什么理由使用案例1吗?似乎案例2正在做我想做的一切吗?执行速度方面有区别吗?
我正在尝试实现将列表作为参数的累积加权平均函数
[[1000, 3.1], [500, 1.2], [800, 7.1], [1300, 8.88]]
Run Code Online (Sandbox Code Playgroud)
并返回(此处四舍五入到小数点后两位)
[3.1, 2.47, 4.08, 5.81]
Run Code Online (Sandbox Code Playgroud)
例如:2.47 =(1000 * 3.1 + 500 * 1.2)/ 1500。
我目前使用以下代码解决了此问题:
def cumulative_weighted_average(list)
cs = 0
qu = 0
res = list.inject([0]) do |s, el|
cs += el[0] * el[1]
qu += el[0]
s + [cs.to_f / qu]
end
res.shift
res
end
Run Code Online (Sandbox Code Playgroud)
有没有更短(更紧凑)的方式来做到这一点?
编辑: 感谢您下面的答案!该列表平均将包含约1000个条目,因此不确定速度要求。由于我实际上需要能够跟踪块中的两个值,因此是否有一些inject扩展允许您编写
list.inject([0,0]){ |s1, s2, el| ...}
Run Code Online (Sandbox Code Playgroud)
哪里s1和s2初始化为0?