当我在 Swift 中声明它时,为什么需要传递变量这个结构?
How come I need to pass variables this struct when I declare it in Swift?
我做错了什么?
我有一个 Class 和一个变量,它是一个结构并且工作得很好。但是,我在结构中也有一个属于另一个结构类型的变量。当我声明该变量(二级结构)时,它一直要求我提供变量。我只希望它们为空,我将设置它们或稍后向它们发送值。
错误文本:
调用中参数 'SV_StinkLocation_Longitude' 缺少参数
调用代码:
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String = ""
var SV_StinkDetails_RecordingDate:NSDate! = NSDate()
var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()
}
错误行
var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()
结构代码:
import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation
struct SV_StinkLocation_Model{
var SV_StinkLocation_Longitude:NSNumber!
var SV_StinkLocation_Latitude:NSNumber!
var SV_StinkLocation_Suburb:String!
var SV_StinkLocation_State:String!
var SV_StinkLocation_Country:String!
}
然而,当我将 details 结构化为 class 变量时,它工作正常。
var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDetails_Model()
我做错了什么?
我建议将模型结构更改为:
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String
var SV_StinkDetails_RecordingDate:NSDate
var SV_StinkDetails_Location :SV_StinkLocation_Model?
}
您不必声明值,因为您使用的是默认初始化(如果您使用自定义初始化,则也不需要声明它们)
在我放在上面的结构中,Location_Model 是可选的,这意味着您可以将初始值设置为“nil”。稍后您可以添加此信息。
不过,请记住在您尝试访问该值时检查(使用“if let”语句)是否已设置该值!
附加值:
你不需要把“!”在模型结构中的类型声明后面。
如果您更改这两件事,您可以使用以下方式获得新的 class:
import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation
struct SV_StinkLocation_Model{
var SV_StinkLocation_Longitude:NSNumber
var SV_StinkLocation_Latitude:NSNumber
var SV_StinkLocation_Suburb:String
var SV_StinkLocation_State:String
var SV_StinkLocation_Country:String
}
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String
var SV_StinkDetails_RecordingDate:NSDate
var SV_StinkDetails_Location :SV_StinkLocation_Model?
}
var details_model = SV_StinkDetails_Model(SV_StinkDetails_Description: "Description:", SV_StinkDetails_RecordingDate: NSDate(), SV_StinkDetails_Location: nil)
details_model.SV_StinkDetails_Location = SV_StinkLocation_Model(SV_StinkLocation_Longitude: 1, SV_StinkLocation_Latitude: 1, SV_StinkLocation_Suburb: “Suburb", SV_StinkLocation_State: "State", SV_StinkLocation_Country: "Country")
最后,您可以使用以下方式访问选项值的经度:
if let longtitude = details_model.SV_StinkDetails_Location?.SV_StinkLocation_Longitude {
println(longtitude)
}
我做错了什么? 我有一个 Class 和一个变量,它是一个结构并且工作得很好。但是,我在结构中也有一个属于另一个结构类型的变量。当我声明该变量(二级结构)时,它一直要求我提供变量。我只希望它们为空,我将设置它们或稍后向它们发送值。
错误文本:
调用中参数 'SV_StinkLocation_Longitude' 缺少参数
调用代码:
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String = ""
var SV_StinkDetails_RecordingDate:NSDate! = NSDate()
var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()
}
错误行
var SV_StinkDetails_Location:SV_StinkLocation_Model! = SV_StinkLocation_Model()
结构代码:
import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation
struct SV_StinkLocation_Model{
var SV_StinkLocation_Longitude:NSNumber!
var SV_StinkLocation_Latitude:NSNumber!
var SV_StinkLocation_Suburb:String!
var SV_StinkLocation_State:String!
var SV_StinkLocation_Country:String!
}
然而,当我将 details 结构化为 class 变量时,它工作正常。
var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDetails_Model()
我做错了什么?
我建议将模型结构更改为:
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String
var SV_StinkDetails_RecordingDate:NSDate
var SV_StinkDetails_Location :SV_StinkLocation_Model?
}
您不必声明值,因为您使用的是默认初始化(如果您使用自定义初始化,则也不需要声明它们)
在我放在上面的结构中,Location_Model 是可选的,这意味着您可以将初始值设置为“nil”。稍后您可以添加此信息。
不过,请记住在您尝试访问该值时检查(使用“if let”语句)是否已设置该值!
附加值:
你不需要把“!”在模型结构中的类型声明后面。
如果您更改这两件事,您可以使用以下方式获得新的 class:
import Foundation
import UIKit
import CoreData
import AVFoundation
import CoreLocation
struct SV_StinkLocation_Model{
var SV_StinkLocation_Longitude:NSNumber
var SV_StinkLocation_Latitude:NSNumber
var SV_StinkLocation_Suburb:String
var SV_StinkLocation_State:String
var SV_StinkLocation_Country:String
}
struct SV_StinkDetails_Model{
var SV_StinkDetails_Description:String
var SV_StinkDetails_RecordingDate:NSDate
var SV_StinkDetails_Location :SV_StinkLocation_Model?
}
var details_model = SV_StinkDetails_Model(SV_StinkDetails_Description: "Description:", SV_StinkDetails_RecordingDate: NSDate(), SV_StinkDetails_Location: nil)
details_model.SV_StinkDetails_Location = SV_StinkLocation_Model(SV_StinkLocation_Longitude: 1, SV_StinkLocation_Latitude: 1, SV_StinkLocation_Suburb: “Suburb", SV_StinkLocation_State: "State", SV_StinkLocation_Country: "Country")
最后,您可以使用以下方式访问选项值的经度:
if let longtitude = details_model.SV_StinkDetails_Location?.SV_StinkLocation_Longitude {
println(longtitude)
}