使用Swift Xcode中其他文件的函数

时间:2015-02-28 10:50:37

标签: ios xcode swift

如何在单独的swift文件中编写函数并使用它(导入它)到我的ViewController.swift文件?我编写了很多代码,所有代码都在ViewController.swift文件中,我真的需要让它看起来很好并将函数放在不同的文件上,以获得更清晰的代码。我有处理解析HTML的函数,处理订购结果的函数,呈现结果,响应用户操作等等。非常感谢您的帮助!

if let htmlString = String(contentsOfURL: checkedUrl, encoding: NSUTF8StringEncoding, error: nil) {


                // Parsing HTML

                let opt = CInt(HTML_PARSE_NOERROR.value | HTML_PARSE_RECOVER.value)

                var err : NSError?

                var parser = HTMLParser(html: htmlString, encoding: NSUTF8StringEncoding, option: opt, error: &err)

                var bodyNode = parser.body


                // Create an array of the part of HTML you need

                if let inputNodes = bodyNode?.findChildTags("h4") { //inputNodes is an array with all the "h4" tag strings

                    for node in inputNodes {

                        let result = html2String(node.rawContents)

                        println("Nyheter: \(result)")

                    }
                }

当我将该函数添加到单独的swift文件时,如何使用“速记”在我的ViewDidLoad方法中使用它?一个简短的关键字,可以抓取那块代码并使用它?

3 个答案:

答案 0 :(得分:9)

易。您只需在Xcode项目中创建一个新的Swift文件(文件 - 新建 - 文件 - Swift文件或仅⌘-N )并将您的函数和类放在那里。无需在视图控制器文件中导入任何内容,因为两个文件都是同一个包的一部分,因此可以看到彼此的功能和类型(除非标记为私有)。

func parseHtml(url: NSURL) -> String { ... your code goes here ... }

答案 1 :(得分:5)

您需要使用singletons

User.swift

中创建NSObject
import Foundation
import UIKit

class User: NSObject {
    var name: String = 0

    func getName() -> String{
        name = "Erik Lydecker"
        return name
    }
}

然后初始化你的对象并在那里触发方法。

ViewController.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let instanceOfUser = User()
        instanceOfUser.getName() // Erik Lydecker
    }
}

答案 2 :(得分:2)

您可以创建实用工具 class,其中填充static variables/functions

例如:

class Utils {
    static func convert(to variable: String) -> Int? {
        ... do some stuff to variable
        return newVariable
    }
}

// on your ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()
    if let converted = Utils.convert(to: "123") {
        print(converted)
    }
}

通过使用静态函数,您可以随时随地访问它们以重复使用它们。

------------------

另一种方法是使用extensions

例如:

extension String {
    var toInt: Int? {
        return Int(self)
    }
}

// on your ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()

    if let converted = "SomeValue".toInt {
        print(converted)
    }
}

这两种方法都可以用于许多不同的场景。