Swift4 기본 사항
변량 
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
    }
}
 
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Swift4 기본 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/kouuuki/items/62b8d3ffdbc39cc2699a
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
// 例えば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
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
    }
}
 
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Swift4 기본 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/kouuuki/items/62b8d3ffdbc39cc2699a
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
// 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
    }
}
 
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Swift4 기본 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/kouuuki/items/62b8d3ffdbc39cc2699a
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
import UIKit
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }
}
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }
}
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()  
    }
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        print("returnが押された")
        return true
    }
}
Reference
이 문제에 관하여(Swift4 기본 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kouuuki/items/62b8d3ffdbc39cc2699a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)