Skip to main content

Blocks in SWIFT 3 and SWIFT 2

SWIFT 3

//Custom view/cell say LocationPickerView (: UIView)

typealias blockDefination_DepatureCityAction = (_ button : UIButton) -> Void

var handler_DepatureCityAction:blockDefination_DepatureCityAction?


@IBAction func btnDepatureCityAction(_ sender: UIButton) {
        if(self.responds(to: #selector(getter: LocationPickerView.handler_DepatureCityAction))){
            self.handler_DepatureCityAction?(sender)
        }

    }

//View controller where you want callback

let locationPickerObject = LocationPickerView(frame: viewLocation.bounds)
locationPickerObject.handler_DepatureCityAction = { button in
            print("DepatureCityAction in view controller")
            print(button)
        }

SWIFT 2

//**************** BLOCK WITHOUT PARAMETER

//DECLARE as property
  • typealias completionBlockSeeMore = () -> Void
  • var cMoreButtonCallBack:completionBlockSeeMore?
  • if(self.respondsToSelector("cMoreButtonCallBack")){             self.cMoreButtonCallBack!() }


//USAGE
  • cell.cMoreButtonCallBack = { () -> Void in
                    printf("Callback in block")
                }


///*** ******BLOCK WITH PARAMETER

  • typealias completionBlockSeeMore = (sender: UIButton) -> Void
  • var cMoreButtonCallBack:completionBlockSeeMore?
  • if(self.respondsToSelector("cMoreButtonCallBack")){ self.cMoreButtonCallBack!(sender: sender) }

//USAGE
  •   cell.cMoreButtonCallBack = { (sender: UIButton) -> Void in
                    print("callback in block \(sender)")
                }

Comments

Popular posts from this blog

How to kill/exit iOS application on a button click programmatically

I had been practising below code to kill an iOS application. exit(0); But last week, my application was rejected by app store due to following reason: We found that your app includes a UI control for quitting the app. This is not in compliance with the iOS Human Interface Guidelines, as required by the App Store Review Guidelines . To avoid any such rebuff, suspend the application using following code snippet. UIApplication.shared.perform(#selector(NSXPCConnection.suspend)) Good news is that now my application is passed the  iOS Human Interface Guidelines and live on app store.

Return multiple values from a function in objective C

We can return tuples in swift as follows:- func getData () -> ( Int , Int , Int ) { //...code here return ( hour , minute , second ) } You can't do that in objective-c. Best option is using parameters by reference . Something like this. - ( void ) getHour :( int *) hour minute :( int *) minute second :( int *) second { * hour = 1 ; * minute = 2 ; * second = 3 ; } And use it like this. int a , b , c ; [ self getHour :& a minute :& b second :& c ]; NSLog (@ "%i, %i, %i" , a , b , c );