English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Swift

Операторы Swift

Управление потоками Swift

Коллекции Swift

Функции Swift

Swift Уровень выше

Методы в Swift

Методы Swift - это функции, связанные с определенными типами

В Objective-C классы - единственный тип, который может определять методы. Но в Swift вы можете выбрать, хотите ли вы определить класс/структуру/枚举, а также гибко определять методы на созданных типах (классах/структурах/枚举ах).

Примерный метод

В языке Swift примерные методы принадлежат методам примера определенного класса, структуры или типа枚ерации.

Примерные методы предоставляют следующие методы:

  • Могут обращаться и изменять примерные свойства

  • Предоставлять функции, связанные с целями примера

Примерные методы должны быть написаны между фигурными скобками ({}) своего типа.

Примерные методы могут неявно обращаться ко всем другим примерным методам и свойствам своего типа.

Примерные методы могут быть вызваны только определенными примерами своего класса.

Примерные методы не могут быть вызваны независимо от существующих примеров.

Грамматика

func funcname(Parameters) -> returntype
{
    Декларация1
    Декларация2
    ……
    Декларация N
    возврат параметров
{}

Пример онлайн

import Cocoa
class Counter {
    var count = 0
    func increment() {
        count += 1
    {}
    func incrementBy(amount: Int) {
        count += amount
    {}
    func reset() {
        count = 0
    {}
{}
// Начальное значение счетчика 0
let counter = Counter()
// Значение счетчика теперь 1
counter.increment()
// Значение счетчика теперь 6
counter.incrementBy(amount: 5)
print(counter.count)
// Значение счетчика теперь 0
counter.reset()
print(counter.count)

Результат выполнения программы приведен выше:

6
0

Класс Counter определяет три примерных метода:

  • increment Увеличить счетчик на 1;
  • incrementBy(amount: Int) Увеличить счетчик на указанное целое значение;
  • reset Восстановить счетчик до 0.

Counter Этот класс также объявляет переменную-свойство countс用它来追踪 текущее значение счетчика.

Локальное имя параметра метода и внешнее имя параметра

Параметры функции в Swift могут иметь как локальное имя (внутри тела функции), так и внешнее имя (при вызове функции)

Методы в Swift очень похожи на методы в Objective-C. Как и в Objective-C, имя метода в Swift обычно содержит предлог, указывающий на первый параметр метода, например: with, for, by и т.д.

Swift по умолчанию предоставляет локальное имя параметра только для первого параметра метода; по умолчанию для второго и последующих параметров предоставляются глобальные имена параметров.

В следующем примере 'no1' объявлен в Swift как локальное имя параметра. 'no2' используется для глобального объявления и доступа через внешнюю программу.

import Cocoa
class division {
    var count: Int = 0
    func incrementBy(no1: Int, no2: Int) {
        count = no1 / no2
        print(count)
    {}
{}
let counter = division()
counter.incrementBy(no1: 1800, no2: 3)
counter.incrementBy(no1: 1600, no2: 5)
counter.incrementBy(no1: 11000, no2: 3)

Результат выполнения программы приведен выше:

600
320
3666

Указание внешнего имени

Мы принудительно добавляем внешнее имя к первому параметру, чтобы использовать этот локальный имя в качестве внешнего имени (до Swift 2.0 использовался символ #).

Напротив, мы также можем использовать подчеркивание (_), чтобы установить второй и последующие параметры без предоставления внешнего имени.

import Cocoa
class multiplication {
    var count: Int = 0
    func incrementBy(first no1: Int, no2: Int) {
        count = no1 * no2
        print(count)
    {}
{}
let counter = multiplication()
counter.incrementBy(first: 800, no2: 3)
counter.incrementBy(first: 100, no2: 5)
counter.incrementBy(first: 15000, no2: 3)

Результат выполнения программы приведен выше:

2400
500
45000

Атрибут self

У каждого примера типа есть скрытый атрибут под названием self, который полностю эквивалентен самому примеру.

Вы можете использовать этот скрытый атрибут self в методе примера, чтобы ссылаться на текущий пример.

import Cocoa
class calculations {
    let a: Int
    let b: Int
    let res: Int
    init(a: Int, b: Int) {
        self.a = a
        self.b = b
        res = a + b
        print("Self 内: \(res)")
    {}
    func tot(c: Int) -> Int {
        return res - c
    {}
    func result() {
        print("Результат: \(tot(c: 20))")
        print("Результат: \(tot(c: 50))")
    {}
{}
let pri = calculations(a: 600, b: 300)
let sum = calculations(a: 1200, b: 300)
pri.result()
sum.result()

Результат выполнения программы приведен выше:

Self: 900
Self: 1500
Результат: 880
Результат: 850
Результат: 1480
Результат: 1450

Изменение типов значений в методах примеров

В Swift структуры и энумера являются типами значений. В общем, свойства типов значений не могут быть изменены в методах примеров.

Но если вам действительно нужно изменить свойства структуры или энумера в определенном методе, вы можете выбрать变异 (mutating) этого метода, и он сможет изменять свои свойства изнутри; и любые изменения, которые он делает, будут сохранены в исходной структуре после завершения метода.

Метод может также присваивать скрытому свойству self новый экземпляр, который заменит исходный экземпляр после завершения метода.

import Cocoa
struct area {
    var length = 1
    var breadth = 1
    func area() -> Int {
        return length * breadth
    {}
    mutating func scaleBy(res: Int) {
        length *= res
        breadth *= res
        print(length)
        print(breadth)
    {}
{}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 3)
val.scaleBy(res: 30)
val.scaleBy(res: 300)

Результат выполнения программы приведен выше:

9
15
270
450
81000
135000

Присваивание self в мутабельных методах

Мутабельные методы могут присваивать скрытому свойству self новый экземпляр.

import Cocoa
struct area {
    var length = 1
    var breadth = 1
    func area() -> Int {
        return length * breadth
    {}
    mutating func scaleBy(res: Int) {
        self.length *= res
        self.breadth *= res
        print(length)
        print(breadth)
    {}
{}
var val = area(length: 3, breadth: 5)
val.scaleBy(res: 13)

Результат выполнения программы приведен выше:

39
65

Типовой метод

Метод примера вызывается определенным примером типа, вы также можете определить метод, который сам тип вызывает, такой метод называется типовым методом.

Указывайте типовые методы структур и списков, добавляя ключевое слово static перед ключом func. Классы могут использовать ключевое слово class для разрешения наследования методов родительского класса.

Типовые методы и методы примеров вызываются с помощью синтаксиса точки (.)

import Cocoa
class Math
{
    class func abs(number: Int) -> Int
    {
        if number < 0
        {
            return (-number)
        {}
        else
        {
            return number
        {}
    {}
{}
struct absno
{
    static func abs(number: Int) -> Int
    {
        if number < 0
        {
            return (-number)
        {}
        else
        {
            return number
        {}
    {}
{}
let no = Math.abs(number: -35)
let num = absno.abs(number: -5)
print(no)
print(num)

Результат выполнения программы приведен выше:

35
5