A talk discussing how the features of the Swift language itself such as enums, protocols and operator overloading can help you write clearer better iOS app code!
Why and How should you approach to Android Security in architecting phase, implementation phase, and operation phase.
This includes what type of secure planning should be considered in term of business domain, what type of universal secure coding should be done. It also talks about how should you store keystores and its password in safe manner.
A talk discussing how the features of the Swift language itself such as enums, protocols and operator overloading can help you write clearer better iOS app code!
Why and How should you approach to Android Security in architecting phase, implementation phase, and operation phase.
This includes what type of secure planning should be considered in term of business domain, what type of universal secure coding should be done. It also talks about how should you store keystores and its password in safe manner.
2019/12/25 に開催した「みんなで Swift 復習会 GO! in 札幌」で使用した資料です。主にオープニング用の資料で、本編で使ったスライドは僅かで現場にいないと役に立たないかもしれませんが、何かの参考用に公開します。
実際の現場で使った本編資料は2ページですけれど、話が脱線する中で詳細に触れた項目が記載されていたページも数ページですけれど公開しておきました。
2018/11/09 の Swift 愛好会の LT で『Swift の let した変数に値を再代入してみよう』という問題提起をするのに使ったオープニング的なスライドです。
このスライドに「解答」は含まれていないので、この話題をきっかけにあれこれ試行錯誤して、さらにはそこから『どうして2回、代入することができたのか』みたいな理由を考える糸口にしてもらえたら嬉しいです。
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() }