33. struct Person {
var name: String
var number: Int
init(name: String) {
self.name = name
self.number = getNextNumber()
}
}
34. struct Person {
var name: String
var number: Int
}
extension Persion {
init(name: String) {
self.name = name
self.number = getNextNumber()
}
35. struct RandomGenerator {
var seed1: UInt32 = arc4random()
var seed2: UInt32 = arc4random()
}
let gen1 = RandomGenerator()
let gen2 = RandomGenerator(seed1: 0, seed2: 1)
36.
37.
38. public struct MyData {
public var value = MyValue()
public init(value: MyValue) {
self.value = value
}
}
39. public struct MyData {
public var value = MyValue()
}
extension MyData {
public init(memberwiseWithValue value: MyValue) {
self.init(value: value)
}
}
40. public struct MyData {
public var value: MyValue
public init(value: MyValue) {
self.value = value
}
}
43. let h = Person.init(name: "Kumagai", number: 1234)
// 関数型変数 f にイニシャライザーを入れて使える
let f: (String,Int) -> Person
= Person.init(name:number:)
let someone = f("Kumagai", 1234)
44. // 取り得る型から推論する
let list = MemberList(persons: .init(name: "A"))
// 関数内で、戻り値の型から推論する
func makePerson(name: String) -> Person {
return .init(name: name)
}
50. struct Value {
init() { … }
}
// メタタイプ型の変数に保存して …
let type: Value.Type = Value.self
// そこからインスタンスを生成できる
let instance: Value = type.init()
型.self
init
51. class Object {
required init(a: Int) {}
init(b: Int) {}
}
let type: Object.Type = Object.self
let a = type.init(a: 0)
let b = type.init(b: 0)
52. class Base {
required init() { … }
}
class Sub : Base {
required init() { … }
}
let types = [Base.self, Sub.self] as [Base.Type]
let instances = types.map { $0.init() }