2016-11-10 6 views
0

私はチュートリアルhttps://github.com/fastred/CustomScrollViewをObjective-CからSwiftに変換しようとしていましたが、私はいくつかの場所で立ち往生しています。 Objective-CでifステートメントのNon Bool/SwiftのObj-Cクロージャ

それは性質があります。

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

をし、それが文の場合があります。

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

これらは明らかに全くBool年代ではないので、これはスウィフトに何を意味しています?


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

この1つは閉鎖のようだと私は使用してスウィフトに変換しようとしました:

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; 
}; 

しかし、変換されたアプリは、」doesnの元のように動作しません。これをSwiftに変換する方法を教えてもらえますか?私が正しく、すべてのことを解釈していた場合

答えて

0

、ここで私はスウィフトでそれを行うだろう方法は次のとおりです。

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エイリアンの言語を呼び出す理由を理解し始めています..: o。もう少し小さなクロージャを追加しました。私はちょうどアプリケーションを変換し、それを動作させるように見えることができない...非常にイライラしている:( –

+0

ハハスウィフトは非常に異なっているが、Obj-Cは他のCベースの言語にかなり類似しているシンタックス。答えに他のクロージャを追加しました。 – PeejWeej

+0

もう一度Txを実行してください。おそらくSwiftで動くようになる方法を理解するのに時間がかかります:) –

関連する問題