2015-06-30 2 views
1

же код функции в другом файле, но называется по-разномуSwift функция тег спутанность

в AppDelegate.swift я писал:

func findIndexOfString(str: String, arr: [String]) -> Int?{ 
    for (index, value) in enumerate(arr){ 
     if (value == str){ 
       return index 
     } 
    } 
    return nil 
} 

я могу назвать эту функцию, как таким образом, нет проблем: (конечно, в классе AppDeleagte)

let index = findIndexOfString(name, arr: neighbors) 

тогда я переместить ВЕСЬ код функции в другой файл - Function.swift (не в классе), я должен вызвать функцию, как таким образом:

let index = findIndexOfString(name, neighbors) // no arr: 

Почему? Может быть, быстро относиться к функциям, которые не относятся к классу, как к глобальной функции С?

ответ

0

При перемещении кода функции WHOLE в другой файл - Function.swift (не в классе), то вы можете вызвать эту функцию, например let index = findIndexOfString(name, neighbors), потому что вы определяете ее вне класса, что означает, что она является глобальной функцией, и вы может получить к нему доступ в любом месте.

Если вы не объявите функцию закрытой, что ограничивает видимость файла, в котором он определен, вы можете использовать его в любом месте модуля, если объявлено как внутреннее (по умолчанию), а также из внешних модулей, если объявлено как общедоступное ,

Для получения дополнительной информации о функциях вы можете обратиться Apple Documentation.

ОБНОВЛЕНИЕ:

Тот факт, что структуры и перечислений могут определять методы в Swift является одним из основных отличие от C и Objective-C. В Objective-C классы являются единственными типами, которые могут определять методы. В Swift вы можете выбрать, следует ли определять класс, структуру или перечисление и по-прежнему иметь гибкость в определении методов для типа, который вы создаете.

Локальные и внешние Параметр Названия методов:

методы в Swift очень похожи на своих коллег в Objective-C.

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

Рассмотрим этот Counter класс, который определяет более сложную форму метода incrementBy(_:):

class Counter { 
    var count: Int = 0 
    func incrementBy(amount: Int, numberOfTimes: Int) { 
     count += amount * numberOfTimes 
    } 
} 

Этот incrementBy(_:numberOfTimes:) метод имеет два параметра-количество и numberOfTimes. По умолчанию Swift обрабатывает сумму только как локальное имя, но обрабатывает numberOfTimes как локальное, так и внешнее имя. Вы вызываете метод следующим образом:

let counter = Counter() 
counter.incrementBy(5, numberOfTimes: 3) 
// counter value is now 15 

Вам не нужно определить имя внешнего параметра для первого значения аргумента, поскольку его цель ясна из названия функции incrementBy (_: numberOfTimes :). Второй аргумент, однако, квалифицируется внешним именем параметра, чтобы сделать его цель понятной при вызове метода.

Поведение, описанное выше, означает, что определения метода в Swift написаны с тем же грамматическим стилем, что и Objective-C, и вызываются естественным, выразительным образом.

Для получения дополнительной информации обратитесь к этому Apple Document.

И вы можете проверить видео THIS, и вы получите ответ в 0:55.

+0

На самом деле, мой вопрос, почему я переместил свой код в другой файл, как я назвал функцию измененной (без тега - arr :)? –

+0

привет, я думаю, я нашел другое объяснение по поводу моего вопроса ... http://www.objc.io/issues/16-swift/swift-functions/ (Вызов всех функций и вызов методов). В этой статье говорится, что если код, не включенный в класс, будет рассматриваться как ФУНКЦИЯ, если это так, я буду рассматривать как МЕТОД. Способ, которым мы называем функцию и метод, различен. –

+0

Я уже предоставил ссылку на документы в своем ответе, которую вы можете проверить там. –

Смежные вопросы