Swift4 기본 사항

18127 단어 SwiftSwi초학자iOS

변량


var,let


변수 var
let 상수

자유형


스위프트에는'임용형'과'비임용형'이 있는데 그 차이는 다음과 같다.
• 임용형 닐 대입 허용
• 비자선형 허용 불가nil 대입
선택 유형 변수혹은기호를 붙이다.

// 例えばStringにnilを代入しようとするとエラーが出ます
$ var a: String = nil
# => error: nil cannot initialize specified type 'String'

// 「?」をつければエラーは出ません
$ var a: String? = nil

// Optionalとついています
$ var a: String? = "hoge"
$ print(a)
# => Optional("hoge")

// 宣言時はnilの状態
$ var a: String?
$ print(a)
# => nil
자동 변수를 사용할 때 nil인지 여부를 판단하십시오.

let str: Optional<String> = nil

if str != nil {
    print(s!) // !でアンラップしてから使う
}


if let value = str {
    print(value)
}

print(str ?? "nilです")

함수.


함수의 기본 형식


일단 기본부터.
// func double(引数名: 型) -> 戻り値の型 {...}
func double(num: Int) -> Int {
  return num * num
}

print(double(num: 3))

// _をつけると引数名を省略できる
func double(_ num: Int) -> Int {
  return num * num
}

print(double(3))

외부 및 내부 매개변수


함수와 바깥쪽에 서로 다른 매개 변수 이름이 붙는다.
// numが外部引数でageが内部引数
func person(name: String, num age: Int) {
  print(name)
  print(age)
}

person(name: "太郎", num: 10)

// 外部引数の省略
func person(_ name: String, _ age: Int) {
  print(name)
  print(age)
}

person("太郎", 10)

기본 매개 변수


func person(name: String = "太郎") {
  print(name)
}

person()
person(name: "花子")
# -> 太郎
# -> 花子

출력 매개 변수


내보내기 매개변수를 사용하여 함수 외부에 변수 내의 재입력을 반영합니다.
func name(name: String) {
  name = "花子" // 引数は関数内では定数になるので再代入はエラーになります
  print(name)
}

// 再代入を可能にするにはinout引数を使います
func name(name: inout String) {
  name = "花子"
  print(name)
}

var name: String = "太郎" // nameに太郎を代入
name(name: &name) // &を忘れない
# -> 花子
// 以降、name変数の中身は花子になっている

가변 길이 매개변수


가변 길이 매개변수는 임의의 값을 수신할 수 있습니다.
...기호를 붙이다.

func fruits(fruits: String...) {
  print(fruits)
  print(fruits[0])
}

fruits(fruits: "apple", "banana", "orange")

// 関数内部ではArray<Element>として扱われる
# -> ["apple", "banana", "orange"]
# -> apple

타입


구조체
종류
열거형

구조체

// Personという構造体を定義
struct Person {
  var name = "太郎"

  func greet() {
    print("hi!")
    print(self) // selfでインスタンス自身にアクセスできる(selfは省略可)
    print(self.name)
    print(name)
  }
}

var p = Person() // Personをインスタンス化
p.greet()

# -> hi!
# -> Person(name: "太郎")
# -> 太郎
# -> 太郎

카테고리


class Human {

  func greet() {
    print("hi!")
  }
}

// classは継承が可能
class Student: Human {
  // overrideで上書きも可能
  override func greet() {
    super.greet() // 親クラスのgreet()の呼び出し
    print("hello")
  }
}

열거형


합의


어떤
[포인트]
프로토콜은 정의만 하고 처리는 이루어지지 않습니다.
이런 변수와 방법밖에 쓸 수 없다~ 이런 선언.
속성의 정의는 var을 사용할 수 있고let을 사용할 수 없습니다.
// Humanプロトコルを定義
protocol Human {
  // プロパティを定義
  var age: Int { get }
  var name: String { get }

  // メソッドを定義
  func printAge()
  func printName()
}

// プロトコルの処理の実装は採用元で行う。
// プロトコルの中で定義したメソッドやプロパティは必ず実装しなければならない。
// 実装していない場合のエラー: does not conform to protocol
class Student: Human {
  var age: Int {
    get{
      return 0
    }
  }

  func printAge() {
  }
}

확장 프로토콜

// プロトコルを定義
protocol Greet {
}

// プロトコルを拡張し、helloメソッドを追加
extension Greet {
    func hello() {
        print("hello!")
    }
}

// プロトコルを採用する
class User: Greet {
}

var user1 = User()
user1.hello() // 拡張で追加したhello()が使えるようになる

경계 문자(Delegate)


객체의 처리를 다른 객체로 대체합니다.
부탁
델게이트에 관해서는 실제 iOS 프로젝트를 사용하는 것이 이해하기 쉬우니 새로운 프로젝트를 만들어보자.
ViewController.swift 내용이에요.

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }
}
UITExt Field Delegate를 추가합니다.

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }
}
UITExt FieldDelegate의 실제 상태는 계약입니다.
Xcode에서 option 키를 누르면서 "UITExt Field Delegate"를 눌러 주십시오.
다음 팝업이 나타날 것입니다.
이것을 보면 어느 방법이 어느 시기에 호출되었는지 알 수 있다.

여기서 "text Field SholdReturn"방법을 사용해 보십시오.
textFieldSholdReturn은 키보드의return 키가 눌렸을 때 호출되는 방법입니다.
import UIKit

class ViewController: UIViewController, UITextFieldDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print("returnが押された")
        return true
    }
}

좋은 웹페이지 즐겨찾기