如何改变数组中的值
How to mutate Values inside a Array
我需要改变以下数组:
struct Person {
var name: String
var age = 0
}
func showPersonArray() -> [Person] {
var dataArray = [Person]()
dataArray.append(Person(name: "Sarah_Yayvo", age: 29))
dataArray.append(Person(name: "Shanda_Lear", age: 45))
dataArray.append(Person(name: "Heidi_Clare", age: 45))
return dataArray
}
如何将 "name" 键拆分为两个键:"givenName" 和 "familyName"。
一些好人之前给了我这个代码:
let arraySeparated1 = dataArray.map { [=11=].substring(to: [=11=].range(of: "_")!.lowerBound) }
let arraySeparated2 = dataArray.map { [=11=].substring(from: [=11=].range(of: "_")!.upperBound) }
是否可以在结构内部进行突变?
函数 showPersonArray() 仅用于演示和测试。
也许有一种方法可以使用目标结构,如下所示:
struct Persontarget {
var familyname: String
var givenName: String
var age = 0
}
struct Person: Array -> [Persontarget] {
var name: String
var age = 0
// Here the split/mutating code
return [PersonWithTwoNames]
}
或使用字符串扩展名。可能我的问题听起来很新,但我整天都在尝试......
谢谢大家!
为你的人 class 创建一个方法或计算机变量,returns 你想要什么。
func firstName() -> String {
return self.substring(to: [=10=].range(of: "_")!.lowerBound)
}
虽然你不应该强制转换
我会在新的 Person
类型上写一个初始化器,它从旧的 person 类型(我称之为 LegacyPerson
)初始化它:
import Foundation
struct LegacyPerson {
let name: String
let age: Int
}
func getPersonArray() -> [LegacyPerson] {
return [
LegacyPerson(name: "Sarah_Yayvo", age: 29),
LegacyPerson(name: "Shanda_Lear", age: 45),
LegacyPerson(name: "Heidi_Clare", age: 45)
]
}
struct Person {
let familyName: String
let givenName: String
let age: Int
}
extension Person {
init(fromLegacyPerson person: LegacyPerson) {
let index = person.name.range(of: "_")!
self.init(
familyName: person.name.substring(from: index.upperBound),
givenName: person.name.substring(to: index.lowerBound),
age: person.age
)
}
}
let people: [Person] = getPersonArray().map(Person.init)
people.forEach{ print([=10=]) }
在扩展
中定义的计算属性的帮助下
struct Person {
let name: String
let age: Int
}
let person = Person(name: "Maria_Terezia", age: 300)
extension Person {
var names:[String] {
get {
return name.characters.split(separator: "_").map(String.init)
}
}
}
for name in person.names {
print(name)
}
打印
Maria
Terezia
我需要改变以下数组:
struct Person {
var name: String
var age = 0
}
func showPersonArray() -> [Person] {
var dataArray = [Person]()
dataArray.append(Person(name: "Sarah_Yayvo", age: 29))
dataArray.append(Person(name: "Shanda_Lear", age: 45))
dataArray.append(Person(name: "Heidi_Clare", age: 45))
return dataArray
}
如何将 "name" 键拆分为两个键:"givenName" 和 "familyName"。 一些好人之前给了我这个代码:
let arraySeparated1 = dataArray.map { [=11=].substring(to: [=11=].range(of: "_")!.lowerBound) }
let arraySeparated2 = dataArray.map { [=11=].substring(from: [=11=].range(of: "_")!.upperBound) }
是否可以在结构内部进行突变? 函数 showPersonArray() 仅用于演示和测试。 也许有一种方法可以使用目标结构,如下所示:
struct Persontarget {
var familyname: String
var givenName: String
var age = 0
}
struct Person: Array -> [Persontarget] {
var name: String
var age = 0
// Here the split/mutating code
return [PersonWithTwoNames]
}
或使用字符串扩展名。可能我的问题听起来很新,但我整天都在尝试...... 谢谢大家!
为你的人 class 创建一个方法或计算机变量,returns 你想要什么。
func firstName() -> String {
return self.substring(to: [=10=].range(of: "_")!.lowerBound)
}
虽然你不应该强制转换
我会在新的 Person
类型上写一个初始化器,它从旧的 person 类型(我称之为 LegacyPerson
)初始化它:
import Foundation
struct LegacyPerson {
let name: String
let age: Int
}
func getPersonArray() -> [LegacyPerson] {
return [
LegacyPerson(name: "Sarah_Yayvo", age: 29),
LegacyPerson(name: "Shanda_Lear", age: 45),
LegacyPerson(name: "Heidi_Clare", age: 45)
]
}
struct Person {
let familyName: String
let givenName: String
let age: Int
}
extension Person {
init(fromLegacyPerson person: LegacyPerson) {
let index = person.name.range(of: "_")!
self.init(
familyName: person.name.substring(from: index.upperBound),
givenName: person.name.substring(to: index.lowerBound),
age: person.age
)
}
}
let people: [Person] = getPersonArray().map(Person.init)
people.forEach{ print([=10=]) }
在扩展
中定义的计算属性的帮助下struct Person {
let name: String
let age: Int
}
let person = Person(name: "Maria_Terezia", age: 300)
extension Person {
var names:[String] {
get {
return name.characters.split(separator: "_").map(String.init)
}
}
}
for name in person.names {
print(name)
}
打印
Maria
Terezia