0
はい、swift 3を使ってグローバル関数を呼び出すのが簡単です。私はそれを行うための多くの方法だと思います。しかし、私はそれが最も簡単な方法だと思う。あなたがそれをたくさん知っているなら、いくつかアドバイスをしてください。swift 3グローバル機能。そんなことができますか?
import Foundation
import UIKit
import FirebaseDatabase
// Start observe the path value for the new one.
func SMFirdatabaseGetSingleObserveWith(path: String, theSnap: @escaping (FIRDataSnapshot) -> Void) {
var isFirstLoad: Bool = true
FIRDatabase.database().reference().child(path).queryLimited(toLast: 1).observe(.childAdded, with: { (snap) in
if snap.exists() {
if isFirstLoad {
isFirstLoad = false
}else {
theSnap(snap)
}
}
})
}
そして、その機能を使用したいとき。私はちょうどそれを以下のように呼ぶ。
class Message {
var messages: [Int] = []
init() {
getNewMessageIndex()
}
func getNewMessageIndex() {
// Use global function here
SMFirdatabaseGetSingleObserveWith(path: "/Message/\("uid")") { (snap) in
messages.append(snap as! Int)
}
}
}
は、あなたが本当に*これは*簡単だと思います行くだろうか? * easy *関数が複数のスレッドから同時に呼び出されると、深刻な問題に遭遇しますか? – vadian
同時に複数のスレッドで呼び出されるのはなぜですか? –
グローバル関数の主な目的はどこからでも呼び出すことです。標準アプリケーションは、異なる並行スレッドで実行されます。したがって、予期しない動作を避けるために、その非同期タスクのために関数がスレッドセーフであることを確認する必要があります。インスタンスを持つカプセル化されたクラスは、スレッドの安全性に関して非常に扱いやすくなります。 – vadian