我需要功能帮助Swift

时间:2019-08-27 21:21:00

标签: swift

Swift 5.0中有这项工作:

该类如下所示。在此类的主体中,创建一个函数,该函数将为特定对象打印此类的参数。创建学生类的此类对象,将其称为此函数并在屏幕上显示结果:

工作班

class Student {
    var name: String
    var surname: String
    var yearOfBorn: Int
    var mark: Double
    init(name: String, surname: String, yearOfBorn: Int, mark: Double) {
        self.name = name
        self.surname = surname
        self.yearOfBorn = yearOfBorn
        self.mark = mark
    }
}

我该怎么做? 我正在尝试:

func printStudent() {
    if name == name {
        print(name)
    } else if surname == surname {
        print(surname)
    } else if yearOfBorn == yearOfBorn {
        print(yearOfBorn)
    } else if mark == mark {
        print(mark)
    }
}

4 个答案:

答案 0 :(得分:-1)

尝试此代码:

class TestFrame(Frame):
    def __init__(self, frMaster):
        ...
        self.testClass = TestClass()
        self.subFrame = SubFrame(self.frMaster, self.testClass)
        ...

class SubFrame(Frame):
    def __init__(self, frMaster, testclass):
        ...
        self.cbTest = ttk.Combobox(..., values=testclass.test_array, ...)

答案 1 :(得分:-1)

如果要打印对象的所有属性,则不需要if语句;实际上,如果您将name == name作为参数传递,则始终会输入第一个if语句,从而跳过其他语句。

您只需要创建一个类似这样的函数即可在其中打印每个属性:

func printStudent() {
    print(self.name)
    print(self.surname)
    print(self.yearOfBorn)
    ...
} 

答案 2 :(得分:-1)

您只需要打印变量:

func printStudent() {
  print("Name: \(self.name), Surname: \(self.surname), Year Of Born: \(self.yearOfBorn)")
} 

答案 3 :(得分:-1)

我不确定这些if语句的目的是什么。也许您在想:

if let foo = foo { ... }

但是仅当foo是可选的时才使用该技术。但是您的属性不是可选的,因此if let语法是不必要的。

不用说,您可以这样做:

func printStudent() {
    print(name)
    print(surname)
    print(yearOfBorn)
    print(mark)
}

FWIW,如果您的意图只是出于自己的目的print,那么您可能希望使class符合CustomStringConvertible

extension Student: CustomStringConvertible {
    var description: String { return "<Student name=\(name); surname=\(surname); yearOfBorn=\(yearOfBorn); mark=\(mark)>" }
}

那么您根本不需要编写自己的printStudent方法,但是可以直接使用print

let student = Student(name: "Rob", surname: "Ryan", yearOfBorn: 2000, mark: 4)
print(student)

这将产生:

  

<学生姓名= Rob;姓=瑞安; yearOfBorn = 2000; mark = 4.0>


或者,如果您可以使用struct值类型,则完全不需要init方法或CustomStringConvertible协议。然后,您可以简单地将Student定义为:

struct Student {
    var name: String
    var surname: String
    var yearOfBorn: Int
    var mark: Double
}

然后

let student = Student(name: "Rob", surname: "Ryan", yearOfBorn: 2000, mark: 4)
print(student)

会产生:

  

学生(姓名:“ Rob”,姓氏:“ Ryan”,yearOfBorn:2000,分数:4.0)