Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
NSMutableArray *funcs = [[NSMutableArray alloc] init];
for (int i = 0; i < 10; i++) {
[funcs addObject:[^ { return i * i; } copy]];
}
int (^foo)(void) = funcs[3];
NSLog(@"%d", foo()); // logs "9"
let funcs = [] + map(0..<10) {i in { i * i }}
println(funcs[3]()) // prints 9
@property (nonatomic, strong) NSMutableString *string;
- (instancetype)init {
self = [super init];
if (self) {
string = [NSMutableString string];
}
}
var string = ""
… а вот передача информации «назад» из текущего MVC в предшествующий осуществляется с помощью делегирования как в Objective-C, так и в Swift.
Нужно выполнить 6 шагов, чтобы внедрить делегирование во взаимодействие View и Controller. Однако в Swift мы можем заменить этот процесс более простым...
typealias yFunctionX = ( x: Double) -> Double?
var yForX: yFunctionX?
. . . . . . . . . .
func drawCurveInRect(bounds: CGRect, origin: CGPoint, pointsPerUnit: CGFloat){
. . . . . . . . .
if let y = (self.yForX)?(x: Double ((point.x - origin.x) / scale)) {
. . . . .
}
}
. . . . . . . . . .
@IBOutlet weak var graphView: GraphView! { didSet {
graphView.yForX = { [unowned self](x:Double) in
self.brain.setVariable("M", value: Double (x))
return self.brain.evaluate()
}
}
// GraphView
typedef double (^yFunctionX)(double x);
.......
@property (nonatomic, copy) yFunctionX yForX;
.......
- (void)drawCurveInRect:(CGRect)bounds origin:(CGPoint)origin pointsPerUnit:(CGFloat)pointsPerUnit {
if (self.yForX != nil) {
double y = self.yForX((double)((point.x - origin.x) / scale);
......
}
}
// GraphViewController
@property (nonatomic, weak) IBOutlet GraphView *graphView;
.......
- (void)setGraphView:(GraphView *)graphView {
_graphView = graphView
__weak typeof (self) weakSelf = self;
_graphView.yForX = ^(double x) {
[weakSelf.brain setVariable:@"M" value:x];
return [weakSelf.brain evaluate];
};
}
var yForX: yFunctionX?
if let y = (self.yForX)?(x: Double ((point.x - origin.x) / scale)) {
. . . .
так как я намеренно сделала переменную-замыкание yForX Optional
Захват контекста замыканиями вместо делегирования в iOS 8 Swift