Swift-機能

関数は、特定のタスクを実行するために一緒に編成されたステートメントのセットです。Swift 4関数は、単純なC関数のように単純なものから、ObjectiveC言語の関数のように複雑なものまであります。これにより、関数呼び出し内でローカルおよびグローバルのパラメーター値を渡すことができます。

  • Function Declaration −関数の名前、戻り値の型、およびパラメーターについてコンパイラーに通知します。

  • Function Definition −関数の実際の本体を提供します。

Swift 4関数には、パラメーターの型とその戻り値の型が含まれています。

関数定義

Swift 4では、関数は「func」キーワードによって定義されます。関数が新しく定義されると、関数への入力 'パラメータ'として1つまたは複数の値を取り、本体の関数を処理し、出力 '戻り値の型'として関数に値を返します。

すべての関数には、関数が実行するタスクを説明する関数名があります。関数を使用するには、その関数をその名前で「呼び出し」、関数のパラメーターのタイプに一致する入力値(引数と呼ばれる)を渡します。関数パラメーターは「タプル」とも呼ばれます。

関数の引数は常に関数のパラメーターリストと同じ順序で指定する必要があり、戻り値の後には→が続きます。

構文

func funcname(Parameters) -> returntype {
   Statement1
   Statement2
   ---
   Statement N
   return parameters
}

次のコードを見てください。学生の名前は、関数 'student'内で宣言された文字列データ型として宣言され、関数が呼び出されると、学生の名前が返されます。

func student(name: String) -> String {
   return name
}

print(student(name: "First Program"))
print(student(name: "About Functions"))

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

First Program
About Functions

関数の呼び出し

たとえば、数値を表示するために、「display」という関数を定義したとします。関数名「display」の関数は、整数データ型を保持する引数「no1」で最初に初期化されます。次に、引数「no1」が引数「a」に割り当てられます。これ以降、同じデータ型の整数を指します。これで、引数 'a'が関数に返されます。ここで、display()関数は整数値を保持し、関数が呼び出されるたびに整数値を返します。

func display(no1: Int) -> Int {
   let a = no1
   return a
}

print(display(no1: 100))
print(display(no1: 200))

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

100
200

パラメータと戻り値

Swift 4は、柔軟な関数パラメーターと、単純な値から複雑な値までの戻り値を提供します。CおよびObjectiveCの関数と同様に、Swift4の関数もいくつかの形式をとることがあります。

パラメータ付きの関数

関数にアクセスするには、そのパラメーター値を関数の本体に渡します。関数内のタプルとして、単一から複数のパラメーター値を渡すことができます。

func mult(no1: Int, no2: Int) -> Int {
   return no1*no2
}

print(mult(no1: 2, no2: 20))
print(mult(no1: 3, no2: 15))
print(mult(no1: 4, no2: 30))

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

40
45
120

パラメータのない関数

パラメータのない関数もあるかもしれません。

構文

func funcname() -> datatype {
   return datatype
}

以下は、パラメータなしの関数を持つ例です-

func votersname() -> String {
   return "Alice"
}
print(votersname())

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Alice

戻り値のある関数

関数は、文字列、整数、および浮動小数点のデータ型の値を戻り値の型として返すためにも使用されます。特定の配列関数の最大数と最小数を見つけるために、関数 'ls'は大小の整数データ型で宣言されています。

配列は整数値を保持するように初期化されます。次に、配列が処理され、配列内のすべての値が読み取られ、前の値と比較されます。値が前の値よりも小さい場合は「small」引数に格納され、それ以外の場合は「large」引数に格納され、関数を呼び出すことによって値が返されます。

func ls(array: [Int]) -> (large: Int, small: Int) {
   var lar = array[0]
   var sma = array[0]

   for i in array[1..<array.count] {
      if i < sma {
         sma = i
      } else if i > lar {
         lar = i
      }
   }
   return (lar, sma)
}

let num = ls(array: [40,12,-5,78,98])
print("Largest number is: \(num.large) and smallest number is: \(num.small)")

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Largest number is: 98 and smallest number is: -5

戻り値のない関数

一部の関数では、戻り値なしで関数内で引数が宣言されている場合があります。次のプログラムは宣言しますa そして bsum()関数の引数として。関数自体の内部で引数の値a そして b 関数呼び出しsum()を呼び出すことによって渡され、その値が出力されるため、戻り値が削除されます。

func sum(a: Int, b: Int) {
   let a = a + b
   let b = a - b
   print(a, b)
}

sum(a: 20, b: 10)
sum(a: 40, b: 10)
sum(a: 24, b: 6)

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

30 20
50 40
30 24

オプションの戻り値の型を持つ関数

Swift 4には、安全対策を導入することで問題を取り除くための「オプション」機能が導入されています。たとえば、関数の値の戻り値の型を整数として宣言しているが、関数が文字列値またはnil値を返すとどうなるかを考えてみます。その場合、コンパイラはエラー値を返します。これらの問題を取り除くために「オプション」が導入されています。

オプションの関数は、「value」と「nil」の2つの形式を取ります。キー予約文字「?」を使用して「オプション」について説明します。タプルが値を返しているのか、nil値を返しているのかを確認します。

func minMax(array: [Int]) -> (min: Int, max: Int)? {
   if array.isEmpty { return nil }
   var currentMin = array[0]
   var currentMax = array[0]
   
   for value in array[1..<array.count] {
      if value < currentMin {
         currentMin = value
      } else if value > currentMax {
         currentMax = value
      }
   }
   return (currentMin, currentMax)
}

if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
   print("min is \(bounds.min) and max is \(bounds.max)")
}

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

min is -6 and max is 109

「オプション」は「nil」またはガベージ値をチェックするために使用されるため、デバッグに多くの時間がかかり、コードが効率的でユーザーが読みやすくなります。

関数ローカルと外部パラメータ名

ローカルパラメータ名

ローカルパラメータ名は、関数内でのみアクセスされます。

func sample(number: Int) {
   print(number)
}

ここでは、 funcサンプル引数番号は、関数sample()によって内部的にアクセスされるため、内部変数として宣言されます。ここで、「数値」はローカル変数として宣言されていますが、変数への参照は、次のステートメントを使用して関数の外部で行われます。

func sample(number: Int) {
   print(number)
}

sample(number: 1)
sample(number: 2)
sample(number: 3)

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

1
2
3

外部パラメータ名

外部パラメーター名を使用すると、関数パラメーターに名前を付けて、その目的をより明確にすることができます。たとえば、以下では、2つの関数パラメーターに名前を付けて、その関数を次のように呼び出すことができます。

func pow(firstArg a: Int, secondArg b: Int) -> Int {
   var res = a
   for _ in 1..<b {
      res = res * a
   }
   print(res)
   return res
}

pow(firstArg:5, secondArg:3)

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

125

可変個引数パラメータ

複数の引数を持つ関数を定義する場合は、メンバーを「可変個引数」パラメーターとして宣言できます。パラメータは、パラメータ名の後に(···)を付けて可変個引数として指定できます。

func vari<N>(members: N...){
   for i in members {
      print(i)
   }
}

vari(members: 4,3,5)
vari(members: 4.5, 3.1, 5.6)
vari(members: "Swift 4", "Enumerations", "Closures")

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

4
3
5
4.5
3.1
5.6
Swift 4
Enumerations
Closures

定数、変数、およびI / Oパラメータ

関数はデフォルトでパラメーターを「定数」と見なしますが、ユーザーは関数への引数を変数として宣言することもできます。'let'キーワードを使用して定数パラメーターを宣言し、変数パラメーターを 'var'キーワードで定義することについてはすでに説明しました。

Swift4のI / Oパラメーターは、関数呼び出し後に値が変更された場合でもパラメーター値を保持する機能を提供します。関数パラメーター定義の先頭で、メンバー値を保持するために「inout」キーワードが宣言されています。

キーワード「inout」は、その値が関数に「in」で渡され、その値が関数本体によってアクセスおよび変更され、元の引数を変更するために関数から「out」に戻されるため、派生します。

変数は、その値だけが関数の内外で変更されるため、in-outパラメーターの引数としてのみ渡されます。したがって、文字列とリテラルをin-outパラメータとして宣言する必要はありません。変数名の前の「&」は、引数をin-outパラメーターに渡すことを示します。

func temp(a1: inout Int, b1: inout Int) {
   let t = a1
   a1 = b1
   b1 = t
}

var no = 2
var co = 10
temp(a1: &no, b1: &co)
print("Swapped values are \(no), \(co)")

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Swapped values are 10, 2

関数タイプとその使用法

すべての関数は、入力パラメーターを考慮して特定の関数に従い、目的の結果を出力します。

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

以下は例です-

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

print(inputs(no1: 20, no2: 10))
print(inputs(no1: 36, no2: 6))

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

2
6

ここで、関数は2つの引数で初期化されます no1 そして no2 整数データ型として、その戻り値の型も「int」として宣言されます

Func inputstr(name: String) -> String {
   return name
}

ここで、関数は次のように宣言されています。 string データ・タイプ。

関数はまた持っているかもしれません void データ型やそのような関数は何も返しません。

func inputstr() {
   print("Swift 4 Functions")
   print("Types and its Usage")
}
inputstr()

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Swift 4 Functions
Types and its Usage

上記の関数は、引数も戻り値もないvoid関数として宣言されています。

関数タイプの使用

関数は最初に整数、浮動小数点、または文字列型の引数で渡され、次に定数または変数として以下に説明するように関数に渡されます。

var addition: (Int, Int) -> Int = sum

ここで、sumは、「a」および「b」整数変数を持つ関数名であり、関数名の追加に対する変数として宣言されています。以降、加算関数と合計関数はどちらも、整数データ型として宣言された同じ数の引数を持ち、参照として整数値を返します。

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("Result: \(addition(40, 89))")

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Result: 129

パラメータタイプおよび戻り値の型としての関数タイプ

関数自体をパラメータタイプとして別の関数に渡すこともできます。

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("Result: \(addition(40, 89))")

func another(addition: (Int, Int) -> Int, a: Int, b: Int) {
   print("Result: \(addition(a, b))")
}
another(sum, 10, 20)

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

Result: 129
Result: 30

入れ子関数

ネストされた関数は、内部関数を呼び出すことによって外部関数を呼び出す機能を提供します。

func calcDecrement(forDecrement total: Int) -> () -> Int {
   var overallDecrement = 0
   func decrementer() -> Int {
      overallDecrement -= total
      return overallDecrement
   }
   return decrementer
}

let decrem = calcDecrement(forDecrement: 30)
print(decrem())

遊び場を使用して上記のプログラムを実行すると、次の結果が得られます-

-30