Sierraを入れられず、mac book買い換えないとダメかと思いmac bookを物色していましたが、ストレージ周りをいろいろ整理していたら、何故かいけましたね。一安心。今日が日曜でなければ一杯飲んでたところ。
Xcodeが最新でないと、swiftの書き方だけでなく、あらゆる面で死活問題でしたので。。。
強制停止はcomand + option + esc
x-code 9.3.1 入りました。半日かかった。ヒャッホー
随机应变 ABCD: Always Be Coding and … : хороший
Sierraを入れられず、mac book買い換えないとダメかと思いmac bookを物色していましたが、ストレージ周りをいろいろ整理していたら、何故かいけましたね。一安心。今日が日曜でなければ一杯飲んでたところ。
Xcodeが最新でないと、swiftの書き方だけでなく、あらゆる面で死活問題でしたので。。。
強制停止はcomand + option + esc
x-code 9.3.1 入りました。半日かかった。ヒャッホー
file -> new -> file -> cocoa file
新しく作ったcocoa classをview controllerと紐づける
ふむふむ
prepare func
class ViewController: UIViewController { @IBOutlet weak var nameText: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } ovrride func prepare(for seque: UIStoryboardSeque, sender: Any?) { let resultVC = seque.destination as! ResultViewController resultVC.myName = self.nameText.text! } }
editor -> embed in -> navigation controller
@IBAction func getOmikuji(sender: AnyObject) { // 0 - n // arc4random_uniform(n + 1) let random = arc4random_uniform(10) self.myLabel.text = String(random) }
おーおーお
@IBOutlet weak var myLabel: UILabel! @IBAction func getOmikuji(sender: AnyObject) { // 0 - n // arc4random_uniform(n + 1) let results = ["大吉", "中吉","吉", "大凶"] let random = arc4random_uniform(UInt32(results.count)) self.myLabel.text = results[Int(random)] } override func viewDidLoad() { super.viewDidLoad() // myLabel.layer.borderColor = UIColor.orange.cgColor // myLabel.layer.borderWidth = 5 // myLabel.layer.cornerRadius = 50 myLabel.layer.masksToBounds = true myLabel.layer.cornerRadius = myLabel.bounds.width / 2 // Do any additional setup after loading the view, typically from a nib. }
conmand + “=” でフォントサイズを調整する
comand + option + “0”
-> utility areaを消す
generic
// Generics func getThree<T>(x: T){ print(x) print(x) print(x) } getThree(x: 5) getThree(x: "Hello") getThree(x: 2.3)
guard
// func sayHi(_ msg: String?){ // if let s = msg{ // print(s) // } else { // print("value is not set!") // } // } // sayHi(nil) // sayHi("hello") func sayHi(_ msg: String?){ guard let s = msg else{ print("value not set!") return } print(s) } sayHi(nil) sayHi("hello")
例外処理
// 例外処理 enum LoginError: Error{ case emptyName case shortName } class User { let name: String init(_ name: String){ self.name = name } func login() throws{ guard name != "" else { throw LoginError.emptyName } guard name.characters.count > 5 else { throw LoginError.shortName } print("login success") } } let tom = User("tom") do { try tom.login() } catch LoginError.emptyName { print("please enter your name") } catch LoginError.shortName{ print("too short") }
optional
// class User { // var name: String = "" // } // let user: User // user = User() // user.name = "him" // let s = user.name.uppercased() // print(s) class User { var name: String = "" } let user: User? user = User() user?.name = "him" if let s = user?.name?.uppercased(){ print(s) }
// Implicity Unwrapped Optional // var msg: String? var msg: String! msg = "hello" // if msg != nil { // print(msg!) // } print(msg)
protocol
// protocol protocol Printable { var type: String { get } var count : Int { get set} func printout() } class User : Printable{ let name: String // property let type = "Laser" var count = 0 init(_ name: String){ self.name = name } func printout(){ count += 1 print("\(type): \(count)") } } let tom = User("tom") tom.printout() tom.printout() tom.printout()
extension
// extension extension String { var length: Int { return self.characters.count } } let msg = "hello" print(msg.characters.count) print(msg.length) protocol Printable { func printout() } class User{ let name: String // property init(_ name: String){ self.name = name } }
// extension extension String { var length: Int { return self.characters.count } } let msg = "hello" print(msg.characters.count) print(msg.length) protocol Printable { func printout() } extension Printable { func printout(){ print("now printing...") } } class User: Printable{ let name: String // property init(_ name: String){ self.name = name } } let tom = User("tom") tom.printout
値の参照
// Int, Double, Array .. ->値型 // Class -> 参照型 // var original = 10 // var copy = original // original // original = 20 // print(original) // print(copy) class User{ var name: String // property init(_ name: String){ self.name = name } } var original = User("tom") var copy = original // originalのデータが格納されている場所 original.name = "bob" print(original.name) print(copy.name)
構造体
// 構造体 // クラスと同機能 struct User{ var name: String // property init(_ name: String){ self.name = name } mutating func changeName(){ self.name = name.Uppercased() } } var original = User("tom") var copy = original // originalの値 original.name = "bob" print(original.name) print(copy.name)
// 列挙型 enum Direction { case right case left } // var dir: Direction // // dir = Direction.right // dir = .right // switch(dir){ // case .right: // print("right") // case .left: // print("left") // } enum Direction: Int { case right = 1 case left = -1 } print(Direction.right.rawValue)
class User { let name: String // property var score: Int // init(name: String, score: Int){ init(_ name: String,_ score: Int){ self.name = name self.score = score } init(){ self.name = "bob" self.score = 30 } } // let tom = User(name: "tom", score: 23) let tom = User("tom", 23) print(tom.name) print(tom.score) let bob = User() print(bob.name) print(bob.score)
計算プロパティ
class User { let name: String // property var score: Int var level: Int{ get { return Int(score / 10) } set { if newValue >= 0 { score = newValue * 10 } } } init(_ name: String,_ score: Int){ self.name = name self.score = score } init(){ self.name = "bob" self.score = 30 } } let tom = User("tom", 23) print(tom.level) tom.level = 5 print(tom.score)
willSetとdidSet
let name: String // property var score: Int { willSet { // before change print("\(score) -> \(newValue)") } didSet { // after change print("Changed: \(score - oldValue)") } } init(_ name: String,_ score: Int){ self.name = name self.score = score } } let tom = User("tom", 23) tom.score = 53 tom.score = 40
method
class User { let name: String // property var score: Int init(_ name: String,_ score: Int){ self.name = name self.score = score } // クラスに紐付いた関数はメソッド func sayHi(msg: String){ print("\(msg) \(name)") } } let tom = User("tom", 23) // tom.sayHi() tom.sayHi(msg: "hola")
classの継承
class User { let name: String // property var score: Int init(_ name: String,_ score: Int){ self.name = name self.score = score } func sayHi(){ print("hi \(name)") } } class AdminUser: User { func sayHello(){ print("hello \(name)") } override func sayHi(){ print("[admin] hi \(name)") } } let tom = User("tom", 23) let bob = AdminUser("bob", 33) print(bob.name) print(bob.score) bob.sayHi() bob.sayHello()
class User { let name: String // property var score: Int static var count = 0 init(_ name: String,_ score: Int){ self.name = name self.score = score User.count += 1 } func sayHi(){ print("hi \(name)") } static func getInfo(){ print("\(count) instances") } } User.getInfo() let tom = User("tom", 23) User.getInfo()
型キャスト
// asを使った変換 -> 型キャスト class User { let name: String // property init(_ name: String){ self.name = name } } class AdminUser: User {} let tom = User("tom") let bob = AdminUser("bob") let users: [User] = [tom, bob] for user in users { // if let u = user as? AdminUser{ // print(u.name) // } if user is AdminUser { user as! AdminUser print(u.name) } }
// var winners: Set<Int> = [3, 5, 8, 8] var winners: Set = [3, 5, 8, 8] print(winners)
// var winners: Set<Int> = [3, 5, 8, 8] var winners: Set = [3, 5, 8, 8] print(winners.contains(3)) winners.insert(10) winners.remove(5) print(winners) print(winners.count)
let a: Set = [1, 3, 5, 8] let b: Set = [3, 5, 8, 9] print(a.union(b)) print(a.intersection(b)) print(a.union(b)) print(a.subtracting(b))
辞書
// var sales: Dictionary<String, Int> = ["kobayashi":200, "kudo":300] // var sales = ["kobayashi": 200, "kudo": 300] // sales["kudo"] = 500 // print(sales["kobayashi"] ?? "n.a.") // sales["yushima"] = 400 // print(sales.count) // for(key, value) in sales { // print("\(key): \(value)") // } let d = [String: Int]() print(d.isEmpty) [/code 関数 // func sayHi(){ // print("hi") // } // sayHi() func sayHi()-> String{ return "hi" } print(sayHi())
// func sayHi(){ // print("hi") // } // sayHi() // func sayHi(name: String){ // print("hi \(name)") // } // sayHi(name: "tom") // func sayHi(from name: String){ // print("hi \(name)") // } // sayHi(from: "tom") // func sayHi(_ name: String){ // print("hi \(name)") // } // sayHi("tom") func sayHi(_ name: String = "tom"){ print("hi \(name)") } sayHi()
func add10(x: inout Int){ x = x + 10 print(x) } var i = 10 add10(x: &i)
class
class User { let name: String // property var score: Int init(){ self.name = "me!" self.score = 23 } } // let uer: User = User() let user = User() print(user.name) print(user.score) user.score = 26 print(user.score)
var n = 0 while n < 3{ print(n) n += 1 } [/code] repeat while [code] var n = 0 repeat { print(n) n += 1 } while n < 3 [/code] for [code] for i in 0...5 { print(i) } [/code] for break [code] for i in 0...5 { if i == 3 { break continue } print(i) } [/code] optional [code] // let s: Optional<String> = nil let s: String? = nil // if s != nil{ // print(s!) // } // optional binding if let value = s { print(value) }
配列
//var scores:[Int] = [50, 40, 30] // var scores = [50, 30] // print(scores[1]) // print(scores.count) // print(scores.isEmpty) var names = [String]() names.append("John") names.append("adam") names += ["yokoi"] for name in names { print(name) }
タプル
// var items = ("apple", 5) // print(items.0) // items.1 = 8 // print(items) // let(product, amount) = items // print(product) // print(amount) // let (product, _) = items // print(product) var items = (product: "apple", amount: 5) print(items.product)