Skip to content

Instantly share code, notes, and snippets.

@lastMove
Last active June 28, 2016 07:19
Show Gist options
  • Save lastMove/5be7046d40f6ac0b92d2373ccdb41c5f to your computer and use it in GitHub Desktop.
Save lastMove/5be7046d40f6ac0b92d2373ccdb41c5f to your computer and use it in GitHub Desktop.
Without literal string
// ---------------------------------------- IBEnum.swift -----------------------------------------
import Foundation
import UIKit
public enum MaskType: IBEnum {
case circle
case polygon(sides:Int?)
case star(points:Int?)
case triangle
case wave(direction:WaveDirection?, width:Float?, offset:Float?)
case parallelogram(angle:Double?)
case none
public enum WaveDirection:String {
case up = "up"
case down = "down"
}
}
public extension MaskType {
init(string:String) {
let paramsAndName = MaskType.extractNameAndParams(string)
let name = paramsAndName.name;
let params = paramsAndName.params;
switch name {
case MaskType.circle.enumName:
self = MaskType.circle
case MaskType.polygon(sides:0).enumName:
self = MaskType.polygon(sides: nil)
case MaskType.star(points: nil).enumName:
self = MaskType.star(points: Int(params[0]))
case MaskType.triangle.enumName:
self = MaskType.triangle;
case MaskType.wave(direction: nil,width: nil,offset: nil).enumName:
self = MaskType.wave(direction: WaveDirection(rawValue:params[0].lowercased()), width: Float(params[1]), offset:Float(params[2]))
case MaskType.parallelogram(angle: nil).enumName:
self = MaskType.parallelogram(angle: Double(params[0]))
default:
self = MaskType.none
}
}
}
// ---------------------------------------- MaskType.swift -----------------------------------------
import Foundation
import UIKit
public enum MaskType: IBEnum {
case circle
case polygon(sides:Int?)
case star(points:Int?)
case triangle
case wave(direction:WaveDirection?, width:Float?, offset:Float?)
case parallelogram(angle:Double?)
case none
public enum WaveDirection:String {
case up = "up"
case down = "down"
}
}
public extension MaskType {
init(string:String) {
let paramsAndName = MaskType.extractNameAndParams(string)
let name = paramsAndName.name;
let params = paramsAndName.params;
switch name {
case MaskType.circle.enumName:
self = MaskType.circle
case MaskType.polygon(sides:0).enumName:
self = MaskType.polygon(sides: nil)
case MaskType.star(points: nil).enumName:
self = MaskType.star(points: Int(params[0]))
case MaskType.triangle.enumName:
self = MaskType.triangle;
case MaskType.wave(direction: nil,width: nil,offset: nil).enumName:
self = MaskType.wave(direction: WaveDirection(rawValue:params[0].lowercased()), width: Float(params[1]), offset:Float(params[2]))
case MaskType.parallelogram(angle: nil).enumName:
self = MaskType.parallelogram(angle: Double(params[0]))
default:
self = MaskType.none
}
}
}
@JakeLin
Copy link

JakeLin commented Jun 28, 2016

What's enumName, something like 'var enumName: String`?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment