Ios 一个变量、一个类和两个相同的函数
我在谷歌搜索这个答案已经很久了,直到我在stack overflow创建了一个帐户来问这个问题 如何编程一个变量来保存一个包含某个变量的类,然后调用同一个函数两次?守则解释如下:Ios 一个变量、一个类和两个相同的函数,ios,swift,oop,Ios,Swift,Oop,我在谷歌搜索这个答案已经很久了,直到我在stack overflow创建了一个帐户来问这个问题 如何编程一个变量来保存一个包含某个变量的类,然后调用同一个函数两次?守则解释如下: class Persons { var oldName = "" var oldAge = 0 var oldGender = "" var name = "" var age = 0 var gender = "" func create(_ name:String, _ age:Int, _ gender:St
class Persons {
var oldName = ""
var oldAge = 0
var oldGender = ""
var name = ""
var age = 0
var gender = ""
func create(_ name:String, _ age:Int, _ gender:String) -> String {
if(age > 100) {
print("Can't create a person with an age that is over 100!")
return "Not created!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not created!"
}
self.name = name
self.age = age
self.gender = gender
self.oldName = name
self.oldAge = age
self.oldGender = gender
print("You just created a \(gender) called: '\(name)' with the age of: '\(age)'!")
return "Created!"
}
func modify(_ targetName:String, _ newName:String, _ newAge:Int, _ newGender:String) -> String {
if(age > 100) {
print("Can't modify a person with an age that is over 100!")
return "Not modified!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not modified!"
}
if(targetName != "" && targetName == self.name) {
self.name = newName
self.age = newAge
self.gender = newGender
print("You just changed \(oldName)'s gender from: \(oldGender) to: \(gender), \(oldName)'s name from: \(oldName) to: \(name) and \(oldName)'s age from: \(oldAge) to: \(age)!")
}
else {
print("Please enter a valid target name or create one!")
}
return "Modified!"
}
func delete(_ targetName:String) -> String {
if(name != "" && targetName == self.name) {
print("Deleted: \(name)!")
}
else {
print("Please enter a valid target name or create one!")
}
return "Deleted!"
}
}
var p = Persons()
p.create("Isak", 11, "Boy")
p.create("Sanne", 7, "Girl") // Here I create another person
p.delete("Isak") // But if I say delete 'Isak' it does not delete him because I created 'Sanne' above!
/*
It would work like this
p.create("Isak", 11, "Boy")
p.delete("Isak")
p.create("Sanne", 7, "Girl")
*/
请帮忙。我花了很长时间才找到答案。如果您需要更多详细信息,请回复,我将尝试解释更多信息。您正在尝试将模型对象用作存储库 您只需要一个简单的模型,对于一个简单的模型,最好使用struct。这也为您提供了免费的初始化器
struct Person {
var name = ""
var age = 0
var gender = ""
}
注意:最好对性别使用枚举
enum Gender {
case male, female
}
struct Person {
var name = ""
var age = 0
var gender: Gender = .male
}
然后只需使用数组来管理列表
let simon = Person(name: "Simon", age: 20, gender: .male)
let isak = Person(name: "Isak", age: 11, gender: .male)
var people = [simon, isak]
print(people.count) // output: 2
people.remove(isak)
print(people.count) // output: 1
let sanne = Person(name: "Sanne", age: 7, gender: .female)
people.append(sanne)
我建议您通读实例化,数组是非常基本的。至少要阅读有关类、结构、实例化和数组的内容。您还试图将模型对象用作存储库 您只需要一个简单的模型,对于一个简单的模型,最好使用struct。这也为您提供了免费的初始化器
struct Person {
var name = ""
var age = 0
var gender = ""
}
注意:最好对性别使用枚举
enum Gender {
case male, female
}
struct Person {
var name = ""
var age = 0
var gender: Gender = .male
}
然后只需使用数组来管理列表
let simon = Person(name: "Simon", age: 20, gender: .male)
let isak = Person(name: "Isak", age: 11, gender: .male)
var people = [simon, isak]
print(people.count) // output: 2
people.remove(isak)
print(people.count) // output: 1
let sanne = Person(name: "Sanne", age: 7, gender: .female)
people.append(sanne)
我建议您通读实例化,数组是非常基本的。至少要了解类、结构、实例化和数组。这里的问题是您使用的是单个Person实例。当您正在执行以下操作时:
p.create("Isak", 11, "Boy")
p.create("Sanne", 7, "Girl") // Here I create another person
您没有创建另一个人,尽管您只是编辑person
类的p
实例的属性。因此,当您删除Isak时:
p.delete("Isak")
现在已经没有伊萨克了,他被重命名为萨恩
要解决此问题,应创建两个单独的Person实例:
var p1 = Persons()
var p2 = Persons()
p1.create("Isak", 11, "Boy")
p2.create("Sanne", 7, "Girl") // Here I create another instance of person
p1.delete("Isak")
在这个状态下,您有两个人:您刚刚删除的Sanne和Isak,并且Sanne仍然存在并且可以访问
如果要使用单个实例容纳所有人员,请使用以下方法:
class Person {
var oldName = ""
var oldAge = 0
var oldGender = ""
var name = ""
var age = 0
var gender = ""
func create(_ name:String, _ age:Int, _ gender:String) -> String {
if(age > 100) {
print("Can't create a person with an age that is over 100!")
return "Not created!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not created!"
}
self.name = name
self.age = age
self.gender = gender
self.oldName = name
self.oldAge = age
self.oldGender = gender
print("You just created a \(gender) called: '\(name)' with the age of: '\(age)'!")
return "Created!"
}
func modify(_ targetName:String, _ newName:String, _ newAge:Int, _ newGender:String) -> String {
if(age > 100) {
print("Can't modify a person with an age that is over 100!")
return "Not modified!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not modified!"
}
if(targetName != "" && targetName == self.name) {
self.name = newName
self.age = newAge
self.gender = newGender
print("You just changed \(oldName)'s gender from: \(oldGender) to: \(gender), \(oldName)'s name from: \(oldName) to: \(name) and \(oldName)'s age from: \(oldAge) to: \(age)!")
}
else {
print("Please enter a valid target name or create one!")
}
return "Modified!"
}
func delete() -> String {
return "Deleted!"
}
}
class Persons {
var personsDictionary = [String: Person]()
}
var persons = Persons()
var p1 = Person()
var p2 = Person()
p1.create("Isak", 11, "Boy")
p2.create("Sanne", 7, "Girl")
persons.personsDictionary[p1.name] = p1
persons.personsDictionary[p2.name] = p2
persons.personsDictionary["Isak"]?.delete()
这里我们有一个Person类(您在问题中定义的类,但略微更改了delete()
方法)和一个名为[String:Person]
的Person类。字典的关键是你的人的名字和价值是这个人
当我们创建一个person实例时,我们将其存储在
PersonDictionary
中,然后我们可以按人名访问该字典中的每个人,并将返回一个可选的,我们可以调用您定义的所有方法。这里的问题是您使用的是person的单个实例。当您正在执行以下操作时:
p.create("Isak", 11, "Boy")
p.create("Sanne", 7, "Girl") // Here I create another person
您没有创建另一个人,尽管您只是编辑person
类的p
实例的属性。因此,当您删除Isak时:
p.delete("Isak")
现在已经没有伊萨克了,他被重命名为萨恩
要解决此问题,应创建两个单独的Person实例:
var p1 = Persons()
var p2 = Persons()
p1.create("Isak", 11, "Boy")
p2.create("Sanne", 7, "Girl") // Here I create another instance of person
p1.delete("Isak")
在这个状态下,您有两个人:您刚刚删除的Sanne和Isak,并且Sanne仍然存在并且可以访问
如果要使用单个实例容纳所有人员,请使用以下方法:
class Person {
var oldName = ""
var oldAge = 0
var oldGender = ""
var name = ""
var age = 0
var gender = ""
func create(_ name:String, _ age:Int, _ gender:String) -> String {
if(age > 100) {
print("Can't create a person with an age that is over 100!")
return "Not created!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not created!"
}
self.name = name
self.age = age
self.gender = gender
self.oldName = name
self.oldAge = age
self.oldGender = gender
print("You just created a \(gender) called: '\(name)' with the age of: '\(age)'!")
return "Created!"
}
func modify(_ targetName:String, _ newName:String, _ newAge:Int, _ newGender:String) -> String {
if(age > 100) {
print("Can't modify a person with an age that is over 100!")
return "Not modified!"
}
if(gender == "Boy" || gender == "Girl") {
}
else {
print("Gender has to be a girl or a boy!")
return "Not modified!"
}
if(targetName != "" && targetName == self.name) {
self.name = newName
self.age = newAge
self.gender = newGender
print("You just changed \(oldName)'s gender from: \(oldGender) to: \(gender), \(oldName)'s name from: \(oldName) to: \(name) and \(oldName)'s age from: \(oldAge) to: \(age)!")
}
else {
print("Please enter a valid target name or create one!")
}
return "Modified!"
}
func delete() -> String {
return "Deleted!"
}
}
class Persons {
var personsDictionary = [String: Person]()
}
var persons = Persons()
var p1 = Person()
var p2 = Person()
p1.create("Isak", 11, "Boy")
p2.create("Sanne", 7, "Girl")
persons.personsDictionary[p1.name] = p1
persons.personsDictionary[p2.name] = p2
persons.personsDictionary["Isak"]?.delete()
这里我们有一个Person类(您在问题中定义的类,但略微更改了delete()
方法)和一个名为[String:Person]
的Person类。字典的关键是你的人的名字和价值是这个人
当我们创建一个person实例时,我们将其存储在
PersonDictionary
中,然后我们可以按人名访问该词典中的每个人,并返回一个可选的实例,我们可以在该实例上调用所有已定义的方法。下面是我将如何开始的部分
首先让类处理所有事情:
class Person {
/// An enum for gender so that you can only ever use the permissable values.
public enum Gender {
case male
case female
}
/// An enum for the results so there are defined values to check (you could add more specific errors).
public enum Result {
case success
case failed(_: String)
}
/// A structure to hold the details of each person.
struct PersonData {
var name: String
var age: UInt
var gender: Gender
}
/// The internal list of people.
private var personList: [String: PersonData] = [:]
/// A function to create a person.
func create(_ name: String, _ age: UInt, _ gender: Gender) -> Result {
guard personList[name] == nil else {
print ("Person already created!")
return .failed("Person already created!")
}
guard age <= 100 else {
print("Can't create a person with an age that is over 100!")
return .failed("Cannot have age over 100!")
}
let person = PersonData(name: name, age: age, gender: gender)
personList[name] = person
print("You just created a \(gender) called: '\(name)' with the age of: '\(age)'!")
return .success
}
/// A function to modify a persons details in the list.
func modify(_ targetName: String, _ newName: String, _ newAge: UInt, _ newGender: Gender) -> Result {
guard let person = personList[targetName] else {
print ("Person not found in list!")
return .failed("Person not found!")
}
guard personList[newName] == nil else {
print ("Person already exists in list!")
return .failed("Person already exist in the list!")
}
if newAge > 100 {
print("Can't modify a person with an age that is over 100!")
return .failed("Cannot modify a person with an ager over 100!")
}
let oldName = person.name
let oldAge = person.age
let oldGender = person.gender
if targetName != newName {
personList.removeValue(forKey: targetName)
}
personList[newName] = PersonData(name: newName, age: newAge, gender: newGender)
print("You just changed \(oldName)'s gender from: \(oldGender) to: \(person.gender), \(oldName)'s name from: \(oldName) to: \(person.name) and \(oldName)'s age from: \(oldAge) to: \(person.age)!")
return .success
}
/// A function to delete a person from the list.
func delete(_ targetName:String) -> Result {
guard let _ = personList[targetName] else {
print ("Person not found in list!")
return .failed("Person not found in list!")
}
personList.removeValue(forKey: targetName)
print("Deleted: \(targetName)!")
return .success
}
/// A test function to print out the current list of people.
func printList() {
for (name, person) in personList {
print ("\(name) is \(person.gender) and age \(person.age)")
}
}
/// Bonus to allow you to get a persons full details using something like person[name].
subscript(name: String) -> PersonData? {
return personList[name]
}
}
结果应该是:
You just created a male called: 'Isak' with the age of: '11'!
Result = Success
You just created a female called: 'Sanne' with the age of: '7'!
Sanne is female and age 7
Isak is male and age 11
Deleted: Isak!
You just changed Sanne's gender from: female to: female, Sanne's name from: Sanne to: Sanne and Sanne's age from: 7 to: 7!
New Sanne is female and age 8
New Sanne is female and age 8
我可能会更进一步,但这应该足以让你开始
(希望这些评论能解释发生了什么,但如果不想问的话,请随意提问)以下是我将如何着手的开始 首先让类处理所有事情:
class Person {
/// An enum for gender so that you can only ever use the permissable values.
public enum Gender {
case male
case female
}
/// An enum for the results so there are defined values to check (you could add more specific errors).
public enum Result {
case success
case failed(_: String)
}
/// A structure to hold the details of each person.
struct PersonData {
var name: String
var age: UInt
var gender: Gender
}
/// The internal list of people.
private var personList: [String: PersonData] = [:]
/// A function to create a person.
func create(_ name: String, _ age: UInt, _ gender: Gender) -> Result {
guard personList[name] == nil else {
print ("Person already created!")
return .failed("Person already created!")
}
guard age <= 100 else {
print("Can't create a person with an age that is over 100!")
return .failed("Cannot have age over 100!")
}
let person = PersonData(name: name, age: age, gender: gender)
personList[name] = person
print("You just created a \(gender) called: '\(name)' with the age of: '\(age)'!")
return .success
}
/// A function to modify a persons details in the list.
func modify(_ targetName: String, _ newName: String, _ newAge: UInt, _ newGender: Gender) -> Result {
guard let person = personList[targetName] else {
print ("Person not found in list!")
return .failed("Person not found!")
}
guard personList[newName] == nil else {
print ("Person already exists in list!")
return .failed("Person already exist in the list!")
}
if newAge > 100 {
print("Can't modify a person with an age that is over 100!")
return .failed("Cannot modify a person with an ager over 100!")
}
let oldName = person.name
let oldAge = person.age
let oldGender = person.gender
if targetName != newName {
personList.removeValue(forKey: targetName)
}
personList[newName] = PersonData(name: newName, age: newAge, gender: newGender)
print("You just changed \(oldName)'s gender from: \(oldGender) to: \(person.gender), \(oldName)'s name from: \(oldName) to: \(person.name) and \(oldName)'s age from: \(oldAge) to: \(person.age)!")
return .success
}
/// A function to delete a person from the list.
func delete(_ targetName:String) -> Result {
guard let _ = personList[targetName] else {
print ("Person not found in list!")
return .failed("Person not found in list!")
}
personList.removeValue(forKey: targetName)
print("Deleted: \(targetName)!")
return .success
}
/// A test function to print out the current list of people.
func printList() {
for (name, person) in personList {
print ("\(name) is \(person.gender) and age \(person.age)")
}
}
/// Bonus to allow you to get a persons full details using something like person[name].
subscript(name: String) -> PersonData? {
return personList[name]
}
}
结果应该是:
You just created a male called: 'Isak' with the age of: '11'!
Result = Success
You just created a female called: 'Sanne' with the age of: '7'!
Sanne is female and age 7
Isak is male and age 11
Deleted: Isak!
You just changed Sanne's gender from: female to: female, Sanne's name from: Sanne to: Sanne and Sanne's age from: 7 to: 7!
New Sanne is female and age 8
New Sanne is female and age 8
我可能会更进一步,但这应该足以让你开始
(希望这些评论能解释它是怎么回事,但如果不想问的话,请随意提问)您不理解实例化!您仅通过p=person()创建了person的一个实例。那么您只是在修改属性。您不了解实例化!您仅通过p=person()创建了person的一个实例。那么你只是在修改属性。谢谢!但是有没有可能像simon.modify(modify是我做的一个函数)?@mopsikesfood当然,只要定义你想在人里面使用的函数,并在需要的时候调用它。如果我是noob,我很抱歉,但我该怎么做呢?我在persons类中创建了一些函数,但如何调用它们?为什么需要从函数中编辑项
var john=Person(姓名:“john”,年龄:20,性别.男性)
john.age=30
。您试图用单个变量来实现这一点的方式是错误的。一个人不能是多个人。您需要person对象和person
列表。谢谢!但是有没有可能像simon.modify(modify是我做的一个函数)?@mopsikesfood当然,只要定义你想在人里面使用的函数,并在需要的时候调用它。如果我是noob,我很抱歉,但我该怎么做呢?我在persons类中创建了一些函数,但如何调用它们?为什么需要从函数中编辑项var john=Person(姓名:“john”,年龄:20,性别.男性)
john.age=30
。您试图用单个变量来实现这一点的方式是错误的。一个人不能是多个人。您需要person对象和一个person
列表。是的,但我想要一个persons类变量。这就是我为什么发这个帖子的原因。它给了我一个错误:“类型‘Persons’的值没有成员‘personsList’@mopsikikesfood是的,对不起,修复了。现在试试看是的,但我想