以下のコードでdefault: breakとすると”variable ‘type’ used before being initialized”でエラーとなりますが、 default: abort()としたらコンパイルも通るし適当な値を入れなくて済む(ただし実行されるとクラッシュする)ということがわかりました。

// http://vimdoc.sourceforge.net/htmldoc/change.html#registers
public class Register {
    public enum Type {
        case Unnamed
        case Numbered
        case SmallDelete
        case Named
        case ReadOnly
        case Expression
        case SelectionAndDrop
        case BlackHole
        case LastSearchPattern
    }

    public let name: Character
    public var type: Type {
        var type: Type
        
        switch name {
        case "\"":                 type = .Unnamed
        case "0"..."9":            type = .Numbered
        case "-":                  type = .SmallDelete
        case "a"..."z", "A"..."Z": type = .Named
        case "%", "#", ":", ".":   type = .ReadOnly
        case "=":                  type = .Expression
        case "*", "+", "~":        type = .SelectionAndDrop
        case "_":                  type = .BlackHole
        case "/":                  type = .LastSearchPattern
            
        default:
            abort()
        }
        
        return type
    }
    
    public init(name: Character) {
        self.name = name
    }
}