Je suis nouveau à Swift et je ne comprends pas comment initialiser une classe.
Réussi est initialisé dans la définition de classe comme false
if (succeeded && (time>1000)){
errormessage += ";connection slow"
}
Le temps est initialisé comme
time = data[3].toInt()
Où les données sont
var data = split(raw_data) {$0 == ","}
Et raw_data
est une chaîne.
Définition de classe:
class geocodeObject: NSObject {
init
définition:
init(lat: String,long:String,userstate:String) {
(pas de super init d'aucune sorte) EDIT: Code complet avec les choses coupées
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")
}
}
Cela faisait un moment mais la réponse que j'ai trouvée est que vous devriez ajouter super.init () comme première ligne à l'intérieur de votre bloc init
init(lat: String,long:String,userstate:String) {
super.init()
...
De cette façon, je m'en suis débarrassé et remplis ce que l'erreur demande. Si je comprends bien, c'est que vos variables sont initialisées pendant NSObject.init () afin que vous puissiez utiliser les valeurs affectées dans votre bloc init (_) personnalisé
Swift 2.2 (toujours bêta au moment de l'écriture) affiche actuellement cette erreur si vous oubliez accidentellement de return nil
à partir d'un guard
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
}
J'espère que cela aide quelqu'un