'self' used before super.init call
Solution 1
It had been a while but the answer I found is that you should add super.init() as the first line inside your init block
init(lat: String,long:String,userstate:String) {
super.init()
...
This way I got rid of it and fulfills what the error is asking for. As I understand this is that your variables are initialized during NSObject.init() so you can use assigned values inside your custom init(_) block
Solution 2
Swift 2.2 (still beta as of writing) currently displays this error if you accidentally forget to return nil
from a guard
's else
:
required init?(dictionary: [String: AnyObject]) {
guard let someValue = dictionary["someValue"] as? Bool else { return /*nil*/ } //Nil should not be commented here
self.someValue = someValue
super.init(dictionary: dictionary) //`self` used before super.init call
}
Hopefully this helps someone
noɥʇʎԀʎzɐɹƆ
CrazyPython is an expert in disliking profiles written in the third person. With over ten years of experience at breathing... You can contact me at my email, jamtlu+so (at) gmail dot com.
Updated on July 25, 2022Comments
-
noɥʇʎԀʎzɐɹƆ almost 2 years
I'm new to swift and I don't understand how to initialize a class.
Succeeded is initialized in the class definition as
false
if (succeeded && (time>1000)){ errormessage += ";connection slow" }
Time is initialized as
time = data[3].toInt()
Where data is
var data = split(raw_data) {$0 == ","}
And
raw_data
is a string.Class Definition:
class geocodeObject: NSObject {
init
definition:init(lat: String,long:String,userstate:String) {
(no super init of any kind) EDIT: Full code with things cut way
class geocodeObject: NSObject { //A type to store the data from the Reverse Geocoding API //Not a retriever //Options let API_KEY_TEXAS = "9e4797c018164fdcb9a95edf3b10ccfc" let DEV_MODE = true //Loading status var succeeded = false var errormessage = "Not Initalized" //Not nesscarilly a failure, could be slow connection var loadstate: String? //Most important info var street: String?; var housenumber: String?; var city: String?; var zip: String? //Metadata var time: IntegerLiteralType?; var statuscode: String?; var queryid: String?; var zip4: String? //Other geographical data var entirestreet: String?; var state: String? init(lat: String,long:String,userstate:String) { //userstate: State provided by user //state: State provided by Reverse Geocoder var url: String? var extra: String? if DEV_MODE{ extra = "¬Store=true" } else{ extra = "" } url = "http://geoservices.tamu.edu/Services/ReverseGeocoding/WebService/v04_01/HTTP/default.aspx?lat="+lat+"&lon="+long+"&apikey="+API_KEY_TEXAS+"&version=4.01" if (userstate == "nil"){ url = url! + extra! println("if") } else{ url = url! + "&state="+state!+extra! println("else") } let raw_data = retrieveurl(url!) var data = split(raw_data) {$0 == ","} //data[1] is API version used. statuscode = data[0]; queryid = data[2]; time = data[3].toInt(); entirestreet = data[4]; city = data[5] state = data[6]; zip = data[7]; zip4 = data[8] //Do street, housenumber, errormessage, succeeded if (state != userstate){ println("user state not equal to state") } var splittedstreet = split(entirestreet!){$0 == " "} housenumber = splittedstreet[0] street = splittedstreet[1] println(statuscode) //Error message handling switch String(statuscode!){ case "200": errormessage = "Success" case "400": errormessage = "Unknown API key error" case "401": ... //Time handling if (succeeded && (time>1000)){ errormessage += ";connection slow" } } println("/GeocodingAPIWrapper.swift/.geocodeObject.init: Not Implemented") }
}