简体   繁体   中英

Swift - Can't access struct properties

Learning swift but a little confused as to the below. I have struct created and instantiated, but I cannot access the property of the struct inside of my view controller class unless the struct is inside one my my class methods. See below, why would this be the case?

class WeatherViewController: UIViewController, UITextFieldDelegate, WeatherManagerDelegate {



    //create new weather manager struct
    var weatherManager = WeatherManager()

    //can't access property here, but I can access it inside of functions within this
    //class, see below under viewDidLoad()
     weatherManager.delegate = self

    @IBOutlet weak var conditionImageView: UIImageView!
    @IBOutlet weak var temperatureLabel: UILabel!
    @IBOutlet weak var cityLabel: UILabel!
    @IBOutlet weak var searchTextField: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()


        //can access property here
        weatherManager.delegate = self

    }

The problem isn't where the WeatherManager object is declared and created. The problem is that this line:

weatherManager.delegate = self

is a command (technically a statement ), not a declaration. (The line above it is a declaration, one that happens to also set the weatherManager property's default value). This is a pretty universal rule in most languages in the C++/Java family -- see short C++ example below. A command (statement) must be inside some method (or function, in non-OOP programming), not at the top level of a file or class. In Swift, actions like setting an object's delegate would typically go in the view controller's viewDidLoad .


int x = 0;  // legal: declaring a global variable                               

x = x + 42; // NOT legal: this is a statement, not a declaraiton                

int main()
{
  x = x + 42; // legal: now we're inside a function                             
  return 0;
}

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