2016-11-10 5 views
0

Я пытался преобразовать учебник https://github.com/fastred/CustomScrollView из Objective-C в Swift, но я застрял в нескольких местах.Non Bool in if statement/Obj-C закрытия в Swift

В Objective-C обладает свойствами:

@property (nonatomic, weak) UIDynamicItemBehavior *decelerationBehavior; 
@property (nonatomic, weak) UIAttachmentBehavior *springBehavior; 

, а затем он имеет, если заявление:

if self.decelerationBehavior && !self.springBehavior { ... } 

Поскольку они не являются явно не Bool «s, что это значит в Swift ?


void(^solveForY)(CGPoint*) = ^(CGPoint *anchor) { 
    if (deltaY != 0) { 
     anchor->y = a * anchor->x + b; 
    } 
}; 

Это один, кажется, укупорочное и я попытался преобразовать его в Swift с помощью:

func solveForY(_ anchor: inout CGPoint) { if deltaY != 0 { anchor.y = a * anchor.x + b } } 

__weak typeof(self)weakSelf = self; 

decelerationBehavior.action = ^{ 
    CGRect bounds = weakSelf.bounds; 
    bounds.origin = weakSelf.dynamicItem.center; 
    weakSelf.bounds = bounds; 
}; 

Но преобразованное приложение Безразлично» t ведут себя как оригинал вообще. Может ли кто-нибудь сказать мне, как преобразовать это в Swift?

ответ

0

Если я интерпретируя все это правильно, вот как я бы сделал это в Swift:

var decelerationBehavior: UIDynamicItemBehavior? 
var springBehavior: UIAttachmentBehavior? 

// the if statement in Objective-C is checking for nil. In Objective-C nil == 0 == false 
if let decelerationBehavior = decelerationBehavior, let springBehavior = springBehavior { ... } 

let solveForY: (CGPoint) ->() = { (anchor) in 
    if deltaY != 0 { 
     anchor.y = a * anchor.x + b; 
    } 
} 

decelerationBehavior.action = { [weak self] in 
    if let weakSelf = self { 
     CGRect bounds = weakSelf.bounds 
     bounds.origin = weakSelf.dynamicItem.center 
     weakSelf.bounds = bounds 
    } 
} 
+0

Спасибо большое, я начинаю понимать, почему некоторые госзакупках называют ObjC-C инопланетный язык ..: о. Я добавил еще одно крошечное закрытие. Я просто не могу преобразовать приложение и заставить его работать ... так разочаровывает :( –

+0

Haha Swift очень отличается, но во многом Obj-C довольно похож на другие языки на основе C, просто с некоторыми разными синтаксис. Добавлено другое закрытие ответа. – PeejWeej

+0

Tx снова куча. Вероятно, потребуется много времени, чтобы выяснить, как заставить его работать в Swift :) –