使用未解析的标识符“静态”

时间:2016-09-16 01:18:34

标签: ios swift swift3

我已经更新了xcode 8.0 swift 3,我发现了很多错误。这是其中之一:

  

使用未解析的标识符“静态”

这是我在以前的版本xcode 7.3.1 swift 2中创建和使用的课程。

import UIKit

enum FONTSIZE:Int
{
    case sizesmall = 1
    case sizesbig = 2
    case sizemedium = 3
}

class sizeFont: NSObject {

    private static var __once: () = {
            Static.instance = sizeFont()
        }()

    class func getSize(_ enumFont : FONTSIZE) -> CGFloat {
        var siz = 17
        switch(enumFont){
        case .sizesbig:
            if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 0){// kecil
                if(isphone()){
                    siz = 22//17
                }else{
                    siz = 22//24
                }

            }else if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 1){// besar
                if(isphone()){
                    siz = 30//19
                }else{
                    siz = 30//28
                }
            }else{
                if(isphone()){
                    siz = 22//17
                }else{
                    siz = 22//22
                }
            }

            break
        case .sizesmall:
            if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 0){// kecil
                if(isphone()){
                    siz = 17//15//12
                }else{
                    siz = 24//22//19
                }
            }else if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 1){// besar
                if(isphone()){
                    siz = 19//17//15
                }else{
                    siz = 28//26//24
                }
            }else{
                if(isphone()){
                    siz = 17//15//12
                }else{
                    siz = 24//22//19
                }
            }
            break
        case .sizemedium:
            if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 0){// kecil
                if(isphone()){
                    siz = 15
                }else{
                    siz = 22
                }
            }else if((UserDefaults.standard.value(forKey: "fontsize") as AnyObject).int32Value == 1){// besar
                if(isphone()){
                    siz = 17
                }else{
                    siz = 26
                }
            }else{
                if(isphone()){
                    siz = 15
                }else{
                    siz = 22
                }
            }
            break
        }
        return CGFloat(siz)
    }

    func getnametag(){

    }

    class func isphone() ->Bool {
        if(UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.phone){
            return true
        }else{
            return false
        }
    }

    // example singleton swift
    class var sharedInstance: sizeFont {
        struct Static {
            static var onceToken: Int = 0
            static var instance: sizeFont? = nil
        }
        _ = sizeFont.__once
        return Static.instance!
    }


}

红线代码是Static.instance = sizeFont()。

我不知道为什么我会这样,其他人都知道吗?

1 个答案:

答案 0 :(得分:7)

Static在类变量中声明,导致var声明之外的每个人都不可达,只需将它移到外面。

...
struct Static {
    static var onceToken: Int = 0
    static var instance: sizeFont? = nil
}
// example singleton swift
class var sharedInstance: sizeFont {
    _ = sizeFont.__once
    return Static.instance!
}
...