Saya memulai proyek saya dengan pengontrol tampilan terpisah sebagai pengontrol tampilan awal dan memulainya secara otomatis dari storyboard.
Umumnya, aplikasi dengan UI ini memiliki satu dan hanya satu pengontrol tampilan terpisah sebagai root, jadi saya membuat variabel statis di subkelas dan menyetelnya saat inisialisasi selesai.
Jadi saya ingin mencoba perilaku ini dengan sigap.
Saya membaca buku panduan bahasa pemrograman Swift di iBook tentang properti Type (dengan kata kunci statis dan kelas) dan mencoba sepotong kode untuk pekerjaan itu:
import UIKit
class SplitViewController: UISplitViewController {
class func sharedInstance() -> SplitViewController {
return SplitViewController.instance
}
class let instance: SplitViewController = nil
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.initialization()
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder);
self.initialization()
}
func initialization() {
SplitViewController.instance = self;
}
}
tapi saya tahu ketika Xcode mengatakan kata kunci kelas untuk properti tipe belum didukung.
Apakah Anda punya solusi untuk melakukan ini?
Jawaban:
Swift sekarang memiliki dukungan untuk variabel statis di kelas. Ini tidak persis sama dengan variabel kelas (karena mereka tidak diwarisi oleh subkelas), tetapi ini membuat Anda cukup dekat:
sumber
class
kata kunci hanya dapat digunakan untuk properti yang dihitung sekarang dan statis untuk semua jenis properti (dalam enum, kelas atau struct)Menyematkan struct dapat berfungsi dengan baik sebagai solusi:
Properti tipe komputasi SomeClass.workaroundClassVariable kemudian dapat digunakan seolah-olah itu adalah properti tipe tersimpan.
sumber
Tampaknya dimungkinkan untuk mendeklarasikan variabel dengan durasi penyimpanan statis dalam cakupan file (seperti di C):
sumber
private
.Metode pilihan saya adalah dengan hanya menggunakan var cakupan file pribadi di luar kelas dan kemudian menerapkan getter dan setter kelas / statis:
sumber
Mulai Swift 1.2 (tersedia dengan Xcode 6.3b1 dan seterusnya),
static
properti dan metode kelas didukung.sumber
class
variabel, atau apakah ada perbedaan (dulustatic
untuk struct,class
untuk kelas)?static
merupakan alias untukclass final
.Menggunakan model singleton dispatch_once di Swift
Tampaknya menjadi jawaban terbaik sejauh ini, menghindari penggunaan variabel global.
sumber
Solusi yang cukup mirip dengan var dalam cakupan file tetapi lebih dapat disesuaikan dan hampir tunggal adalah dengan menggunakan struct yang mendukung var statis sebagai properti kelas
sumber
Oke, dengan solusi Nikolai yang melakukan pekerjaan itu. Saya memposting perubahan saya di utas ini untuk informasi
dan misalnya, di appDelegate saya, saya dapat mengakses metode statis seperti ini
sumber
Kata-kata dalam kesalahan sangat menyiratkan bahwa ini akan menjadi fitur bahasa di masa mendatang.
Anda mungkin ingin menggunakan untuk sementara waktu untuk mendeklarasikan variabel properti di Delegasi Aplikasi dan mengambilnya dari sana. Tidak ideal, pasti anti-pola, tapi akan memberi Anda tempat sentral untuk mengambilnya
UISplitViewController
saat dibutuhkan.sumber
Anda harus membungkus variabel kelas di dalam variabel struct dalam
sumber
Coba ini:
sumber
Ini disebut Type Property di Swift.
Baca lebih lanjut di tautan di bawah ini,
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254
sumber