'self' 在 super.init 调用之前使用
'self' used before super.init call
我是 swift 的新手,我不明白如何初始化 class。
成功在class定义中初始化为false
if (succeeded && (time>1000)){
errormessage += ";connection slow"
}
时间初始化为
time = data[3].toInt()
数据在哪里
var data = split(raw_data) {[=14=] == ","}
而raw_data
是一个字符串。
Class定义:
class geocodeObject: NSObject {
init
定义:
init(lat: String,long:String,userstate:String) {
(没有任何类型的超级初始化)
完整代码与切入方式:
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) {[=17=] == ","}
//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!){[=17=] == " "}
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")
}
}
已经有一段时间了,但我找到的答案是您应该将 super.init() 添加为 init 块中的第一行
init(lat: String,long:String,userstate:String) {
super.init()
...
这样我就摆脱了它并满足了错误的要求。
据我了解,您的变量是在 NSObject.init() 期间初始化的,因此您可以在自定义 init(_) 块
中使用分配的值
Swift 2.2(撰写本文时仍处于测试阶段)如果您不小心忘记从 guard
中 return nil
,当前会显示此错误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
}
希望这对某人有所帮助
我是 swift 的新手,我不明白如何初始化 class。
成功在class定义中初始化为false
if (succeeded && (time>1000)){
errormessage += ";connection slow"
}
时间初始化为
time = data[3].toInt()
数据在哪里
var data = split(raw_data) {[=14=] == ","}
而raw_data
是一个字符串。
Class定义:
class geocodeObject: NSObject {
init
定义:
init(lat: String,long:String,userstate:String) {
(没有任何类型的超级初始化)
完整代码与切入方式:
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) {[=17=] == ","}
//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!){[=17=] == " "}
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")
}
}
已经有一段时间了,但我找到的答案是您应该将 super.init() 添加为 init 块中的第一行
init(lat: String,long:String,userstate:String) {
super.init()
...
这样我就摆脱了它并满足了错误的要求。 据我了解,您的变量是在 NSObject.init() 期间初始化的,因此您可以在自定义 init(_) 块
中使用分配的值Swift 2.2(撰写本文时仍处于测试阶段)如果您不小心忘记从 guard
中 return nil
,当前会显示此错误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
}
希望这对某人有所帮助