如何在单独的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方法中使用它?一个简短的关键字,可以抓取那块代码并使用它?
答案 0 :(得分:9)
易。您只需在Xcode项目中创建一个新的Swift文件(文件 - 新建 - 文件 - Swift文件或仅⌘-N )并将您的函数和类放在那里。无需在视图控制器文件中导入任何内容,因为两个文件都是同一个包的一部分,因此可以看到彼此的功能和类型(除非标记为私有)。
func parseHtml(url: NSURL) -> String { ... your code goes here ... }
答案 1 :(得分:5)
您需要使用singletons
。
在User.swift
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)
}
}
这两种方法都可以用于许多不同的场景。