2016年8月18日 星期四

swift + crc32

 class CRC32 {
    var data = NSData()
    
    private static let crcTableLength = Int(UInt8.max) + 1
    private static var _crcTable = [UInt32](count: crcTableLength, repeatedValue: 0)
    private static var crcTable: [UInt32] {
        get {
            if _crcTable[1] != 0 {
                return _crcTable
            }
            for n in 0..
                var c = UInt32(n)
                for _ in 0..<8 {
                    if ((c & 1) != 0) {
                        c = 0xedb88320 ^ (c >> 1)
                    } else {
                        c = c >> 1
                    }
                }
                _crcTable[n] = c
            }
            
            return _crcTable
        }
    }
    
    func getCRC() -> Byte4 {
        var crc: Byte4 = 0
        crc = ~crc
        
        var buf = UnsafePointer<UInt8>(data.bytes)
        let len = data.length
        
        for _ in 0..
            let toBuf = buf.memory
            buf += 1
            let i = Int((crc ^ UInt32(toBuf)) & 0xFF)
            crc = self.dynamicType.crcTable[i] ^ crc >> 8
        }
        
        return ~crc
    }
}

2016年8月9日 星期二

HTML+UILabel(or TextView)

On swift
var attrStr = try! NSAttributedString(
        data: "text".dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
        options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
        documentAttributes: nil)

label.attributedText = attrStr

On java
myTextView.setText(Html.fromHtml("

Title


Description here
"
));

2016年7月30日 星期六

swift script

沒想到swift也可以替代shell script

#!/usr/bin/swift -F Carthage/Build/Mac/
#只要開頭像這樣宣告就可以用swift xxx.swift執行
#另外 -F 是第三方framework的路徑

#請愛用carthage
#mkdir swift_btc_script
#cd swift_btc_script
#echo 'github "nomothetis/OptionKit" ~> 1.0' > Cartfile
#carthage update

2016年7月1日 星期五

swift強化版的enum

enum 水果 {
    case 櫻桃(價位: Int, 產地: String)
    case 火龍果(價位: Int, 產地: String)
    
    static let 價目表 = [
        櫻桃(價位: 3400, 產地: "華盛頓"),
        火龍果(價位: 1100, 產地: "埔里")
    ]
    
    private func valueAt(pos: Int) -> AnyObject? {
        if let first = Mirror(reflecting: self).children.first {
            let children = Mirror(reflecting: first.value).children
            let index = children.startIndex.advancedBy(IntMax(pos))
            if let value = children[index].value as? AnyObject {
                return value
            }
        }
        return nil
    }
    
    func 價位() -> Int {
        if let value = valueAt(0) as? Int {
            return value
        }
        
        return 0
    }
    
    private func valueAt(pos: Int, with: String) -> AnyObject? {
        if let first = Mirror(reflecting: self).children.first {
            if first.label == with {
                let children = Mirror(reflecting: first.value).children
                
                let index = children.startIndex.advancedBy(IntMax(pos))
                if let value = children[index].value as? AnyObject {
                    return value
                }
            }
        }
        return nil
    }
    
    static func 詢價(水果名: String) -> Int {
        for 價目 in 價目表 {
            if let price = 價目.valueAt(0, with: 水果名) as? Int {
                return price
            }
        }
        
        return 0
    }
}

水果.詢價("火龍果")

2016年3月24日 星期四

got UIBarButtonSystemItem icon on iOS

這裡找到一個方法,可惜在swift上不能跑
還好試出了這個方法

func imageFromSystemBarButton(systemItem: UIBarButtonSystemItem)-> UIImage {
    let tempItem = UIBarButtonItem(barButtonSystemItem: systemItem, target: nil, action: nil)

    // add to toolbar and render it
    UIToolbar().setItems([tempItem], animated: false)

    // got image from real uibutton
    let itemView = tempItem.valueForKey("view") as! UIView
    for view in itemView.subviews {
        if view.isKindOfClass(UIButton){
            let button = view as! UIButton
            return button.imageView!.image!
        }
    }

    return UIImage()
}

2016年2月25日 星期四

use apple script to disable AppleUSBFTDI

tell application "Finder"
display dialog ("Check dongle is plugin.") buttons {"Ok"}
try
do shell script "sudo kextunload -b com.apple.driver.AppleUSBFTDI" with administrator privileges
end try
display dialog ("It work!") buttons {"Ok"}

end tell

2015年10月5日 星期一

Cordova速記

cordova create 資料夾 com.公司名.專案名 程式名

cordova platform add iOS 
cordova platform add android

cordova plugin add cordova-plugin-device