I hereby claim:
- I am dduan on github.
- I am duan (https://keybase.io/duan) on keybase.
- I have a public key whose fingerprint is 2D75 873D D420 18FB 5B6B 72C5 4876 9046 F6CC 539C
To claim this, I am signing this object:
#!/usr/bin/env xcrun swift | |
/* | |
usage: | |
1. chmod +x QuickOutline.swift | |
2. ./QuickOutline.swift outline.json | |
this will generate BDD/[Quick](https://github.com/Quick/Quick) style test outlines according to outline.json | |
an example outline.json: |
struct Complex<T: FloatLiteralConvertible> { | |
var real: T | |
var imaginary: T | |
} | |
func +(lhs: Complex<Double>, rhs: Complex<Double>) -> Complex<Double> { | |
return Complex<Double>(real: lhs.real + rhs.real, imaginary: lhs.imaginary + rhs.imaginary) | |
} | |
func -(lhs: Complex<Double>, rhs: Complex<Double>) -> Complex<Double> { |
// CaseInsensitiveDictionary.swift | |
// Created by Daniel Duan on 12/19/14. | |
// Usaege Example: | |
// var test = CaseInsensitiveDictionary<String, Int>() | |
// test["Winter is coming"] = 1 | |
// | |
// test["WINTER is Coming"] = test["Winter Is Coming"] // true | |
// test["Hear Our Roar?"] = 1 | |
// | |
// test.count == 2 // true |
import UIKit | |
class DeselectableSegmentedControl: UISegmentedControl { | |
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) { | |
let previouslySelectedIndex = self.selectedSegmentIndex | |
super.touchesEnded(touches, withEvent: event) | |
if previouslySelectedIndex == self.selectedSegmentIndex { | |
self.selectedSegmentIndex = UISegmentedControlNoSegment | |
self.sendActionsForControlEvents(UIControlEvents.ValueChanged) | |
} |
import UIKit | |
extension UISegmentedControl { | |
func goVertical() { | |
self.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2)) | |
for segment in self.subviews { | |
for segmentSubview in segment.subviews { | |
if segmentSubview is UILabel { | |
(segmentSubview as UILabel).transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2)) | |
} |
extension NSAttributedString { | |
func replaceHTMLTag(tag: String, withAttributes attributes: [String: AnyObject]) -> NSAttributedString { | |
let openTag = "<\(tag)>" | |
let closeTag = "</\(tag)>" | |
let resultingText: NSMutableAttributedString = self.mutableCopy() as NSMutableAttributedString | |
while true { | |
let plainString = resultingText.string as NSString | |
let openTagRange = plainString.rangeOfString(openTag) | |
if openTagRange.length == 0 { |
Verifying myself: My Bitcoin username is +duan. https://onename.io/duan |
- (NSString *)guessMIMETypeFromFileName: (NSString *)fileName { | |
// Borrowed from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database | |
CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[fileName pathExtension], NULL); | |
CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType); | |
CFRelease(UTI); | |
if (!MIMEType) { | |
return @"application/octet-stream"; | |
} | |
return (__bridge NSString *)(MIMEType); | |
} |
I hereby claim:
To claim this, I am signing this object: