【问题标题】:How to read array and enum data on swift如何快速读取数组和枚举数据
【发布时间】:2019-03-15 01:03:12
【问题描述】:

如何在swift上读取这三种类型的数据 我想将这三个变量分配给标签。我该怎么做? [第一次用swift编码,我是学习者,IOS移动开发非常初学者]

student.swift

    class Student{
        let nubmers: [phone_number]? 
        let bday: DOB?
        let gender: Gender?

        init(numbers:[phone_number],bday:DOB, gender:Gender){
            self.nubmers = []
            self.bday = bday
            self.gender = gender
       }
    }

enum Gender{
    case Male
    case Female
    case Unspecific
}

phone_number.swift

import Foundation
    struct phone_number {
        var number:String!
    }

DOB.dart

import Foundation

struct DOB {
    let year:Int!
    let month:Int!
    let day:Int!
}

像这样插入数据?对吗?

 let student1 = Student(
             numbers: [phone_number(number: "0773024962")],
             bday: DOB(year:1996,month:01,day:13),
             gender: Gender.Male)

我想这样读 //Error

 func setStudent(student: Student){
         label.text = numbers.number
         label.text = student.bday
          label.text = student.gender
     }

【问题讨论】:

  • label.text = numbers.number,这应该是 student.numbers 吗?
  • 访问您需要的第一个电话号码student.numbers.first?.number
  • 为什么是-2?这不是个好问题吗?这是为什么呢?
  • 您可以通过描述错误是什么来改进您的问题,而不是简单地说明存在错误。 (我没有投反对票)。此外,它不会导致您的问题,但是在您的 DOB 结构中使用隐式解包选项是不必要的,为什么不简单地使用 Date 作为出生日期?同样,将String 包装在phone_number 的结构中似乎没有必要。 Swift 风格对结构和类使用大写的驼峰式大小写,而不是 _,所以它应该是 PhoneNumber
  • @DarwinHarianto 没有。错误消息无法分配类型“[PhoneNumbers]?”的值输入“字符串?”

标签: ios swift enums enumeration


【解决方案1】:

如果你想引用第一个电话号码,那么你需要

label.text = student.numbers.first?.number

我可以提出其他一些改进建议:

  • 没有必要在 DOB 结构中使用隐式解包选项 - 初始化程序确保它们具有值
  • 为什么不简单地使用Date 作为出生日期呢?
  • 同样,似乎没有必要将 String 包装到 phone_number 的结构中。
  • Swift 风格对结构和类使用大写的驼峰式大小写,而不是 _,所以它应该是 PhoneNumber
  • 枚举大小写应以小写字母开头
  • 您可以为Student 使用结构而不是类 - 您正在使用let 属性,因此您已经具有不变性。结构为您提供自动初始化器生成

struct Student {
    let numbers: [String] 
    let bday: Date
    let gender: Gender
}

enum Gender {
    case male
    case female
    case unspecified
}

var dc = DateComponents()

dc.setValue(13, for: .day)
dc.setValue(1, for: .month)
dc.setValue(1996, for: .year)
dc.timeZone = TimeZone(secondsFromGMT: 0)
let dob = Calendar.autoupdatingCurrent.date(from: dc)! 
// You could also use a DateFormatter to parse DOB from a string
let student1 = Student(numbers:["0773024962"], DOB:dob, gender:.male)

【讨论】:

  • 电话号码的选项可以是numbers.joined(separator:”,”)
  • 非常感谢您对 Pauw11 的建议。我为 PhoneNumber 使用了一个数组,因为用户有多个号码。如何使用数组作为电话号码/
  • @JoakimDanielson 如何使用连接(分隔符)
  • @BhanukaIsuru 为了澄清我之前的评论,当您想将所有电话号码作为字符串获取时,请使用加入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2018-09-29
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多