简体   繁体   中英

How to declare a property as a function in Swift?

Here is my code:

import Cocoa

class VC1: NSViewController {
    let aFunctionVar ()->Void
}

The compiler however tells me: "Class VC1 has no initializers"

According to the swift example in Apple Swift iBook, they did their examplle like so:

var mathFunction: (Int, Int) -> Int = addTwoInts

But in my case, I'm trying to create a property variable. It is not yet known what the variable will be, so i can't set it there. Any help?

Edit - I already know how to make variables optional and lazy when it comes to simple String/Array/Dictionary types etc. But this is a function type property variable. It is meant to hold a function of type ()->Void . Any help on how this can be done?

In objectiveC this can be done by making a block property like this:

@property (nonatomic, copy)  void (^aFunctionVar)();

If the value will be known after the object is setup, you can use a lazy variable:

class LazyTester {
    lazy var someLazyString: String = {
       return "So sleepy"
    }()
}
var myLazyTester = LazyTester()
myLazyTester.someLazyString

The compiler is giving you that error because you are defining a mandatory stored variable, projectLaunchData , but not giving it a value. If you know the variables value at init time, you can set it at init time.

Declare projectLaunchData as an optional var :

import Cocoa

class VC1: NSViewController {
    var projectLaunchData: (()->Void)?
}

Then you can assign a value later:

func test() {
    print("this works")
}

let myVC = VC1()

// assign the function
myVC.projectLaunchData = test

// Call the function using optional chaining.  This will safely do nothing
// if projectLaunchData is nil, and call the function if it has been assigned.
// If the function returns a value, it will then be optional because it was
// called with the optional chaining syntax.
myVC.projectLaunchData?()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM