当我在Swift中声明它时,为什么我需要传递变量这个结构?

时间:2015-03-10 19:57:50

标签: xcode function swift methods struct

我做错了什么? 我有一个带有变量的类,它是一个结构,并且运行良好。但是我在struct中有一个变量,它是另一个struct的类型。当我声明那个变量(第二级结构)时,它一直要求我提供变量..我只想让它们为空,我会设置它们或稍后发送它们。

错误文字:

在调用

中缺少参数'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!
}

但是,当我将细节结构化为类变量时,它可以正常工作。

var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDetails_Model()

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我建议将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”语句)!

增值:
您不需要在模型结构中将“!”放在类型声明后面。

如果您更改这两件事,您可以使用以下方式获取新课程:

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)
}