【问题标题】:How come I need to pass variables this struct when I declare it in Swift?当我在 Swift 中声明这个结构时,我为什么需要传递变量?
【发布时间】:2015-03-10 19:57:50
【问题描述】:

我做错了什么? 我有一个带有变量的类,它是一个结构并且可以完美运行。但是,我在结构中也有一个变量,它是另一个结构的类型。当我声明该变量(二级结构)时,它一直要求我提供变量。我只希望它们为空,稍后我将设置它们或发送它们的值。

错误文本:

调用中的参数“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 struct 设置为类变量时,它可以正常工作。

var SV_Stink_StinkDetails:SV_StinkDetails_Model! = SV_StinkDetails_Model()

我做错了什么?

【问题讨论】:

    标签: xcode function swift methods struct


    【解决方案1】:

    我建议将您的模型结构更改为:

    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”语句)是否在您尝试访问时设置了该值!

    为了增加价值:
    你不需要把“!”在 Model 结构中的类型声明后面。

    如果您更改这 2 件事,您可以使用以下方法获得新课程:

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

    【讨论】:

    • 绝对传奇谢谢。我仍然很难理解 Swift 中的血腥可选因素。非常感谢您回答@milo526
    • 如何在我的 Location Struct 中调用函数?
    • 这里可以多用 if let 语句。您可以检查是否已设置选项位置,如果已设置,您可以使用普通位置结构执行所有您可以执行的操作(无法访问我的 Mac atm,我将在今天下午上传一个示例)
    • @TimHiatt 因为 cmets 不是解释代码的最佳场所;我用代码here做了一个pastebin粘贴,希望对你使用函数有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多