[Swift]split
split
let t:String = "yyyy-MM-dd HH:mm:ss" //let tmp:[String] = split(t, {$0 == "-" || $0 == " " || $0 == ":"}) //この方法でもよい let tmp:[String] = split(t, {contains(["-"," ",":"],$0)}) println(tmp)
出力結果
[yyyy, MM, dd, HH, mm, ss]
split
let t:String = "yyyy-MM-dd HH:mm:ss" //let tmp:[String] = split(t, {$0 == "-" || $0 == " " || $0 == ":"}) //この方法でもよい let tmp:[String] = split(t, {contains(["-"," ",":"],$0)}) println(tmp)
出力結果
[yyyy, MM, dd, HH, mm, ss]
rgbから16進数文字列取得
func getColorHexByColorTuple(color:(r:CGFloat,g:CGFloat,b:CGFloat)) -> String{ return NSString(format: "%02x%02x%02x", Int(color.r*255.0),Int(color.g*255.0),Int(color.b*255.0)) }
UIColorからrgb値取得
func getColorTupleByUIColor(color:UIColor) -> (r:CGFloat,g:CGFloat,b:CGFloat){ var r:CGFloat = 0 var g:CGFloat = 0 var b:CGFloat = 0 var a:CGFloat = 0 color.getRed(&r, green: &g, blue: &b, alpha: &a) return (r: r, g: g, b: b) }
16進数文字列からrgb取得
class func getColorTupleByColorHex(colorHex:String) -> (r:CGFloat,g:CGFloat,b:CGFloat){ let colorScanner:NSScanner = NSScanner(string: colorHex) var color:UInt32 = 0 colorScanner.scanHexInt(&color) let r:CGFloat = CGFloat((color & 0xFF0000) >> 16) / CGFloat(255.0); let g:CGFloat = CGFloat((color & 0x00FF00) >> 8) / CGFloat(255.0); let b:CGFloat = CGFloat(color & 0x0000FF) / CGFloat(255.0); return (r: r, g: g, b: b) }
enumerate
var values:[[AnyObject]] = [] for (index:Int,list:[AnyObject]) in enumerate(self.values) { for var i=0;i<list.count;i+=3 { //処理 } }
クロージャ#2
定義
private func getSampleText(message:String,callBackClosure:(Bool,String)->Void) { //do something callBackClosure(true,"メッセージ:\(message)") }
実行
self.getSampleText("ぽえーん", callBackClosure: { (result, resultMessage) -> Void in println("result:\(result) message:\(resultMessage)") })
XCode6.2におけるシングルトン
クラス
private let sharedInstance = MyClass() class MyClass { class func getInstance() -> EKEventManager { return sharedInstance } private init(){ //一回だけ実行される } }
使う時
let myc:MyClass = MyClass.getInstance()
クラス
import Foundation class RequestManager:NSObject,NSURLConnectionDelegate,NSURLConnectionDataDelegate{ var storedData:NSMutableData? //------------------ init -------------------- override init(){ } //------------------ common -------------------- private func getQueryStringByDic(dic:Dictionary<String,String>) -> String{ var tmp:[String] = [] for key:String in dic.keys { tmp.append("\(key)=\(dic[key])") } return join("&",tmp) } private func getUrlEncodedQueryStringByDic(dic:Dictionary<String,String>) -> String{ var tmp:[String] = [] for key:String in dic.keys { let value:String = dic[key]! tmp.append("\(key)=\(value.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet())!)") } return join("&",tmp) } private func getDeviceDatetimeString() -> String{ let date:NSDate = NSDate(timeIntervalSinceNow:NSTimeInterval(NSTimeZone.systemTimeZone().secondsFromGMT)) var form:NSDateFormatter = NSDateFormatter() form.calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) form.dateFormat = "yyyy-MM-dd HH:mm:ss" form.timeZone = NSTimeZone(forSecondsFromGMT: 0) form.locale = NSLocale(localeIdentifier: "en_US_POSIX") return form.stringFromDate(date) } /** 返り値は[AnyObject]またはDictionary **/ private func getDataByJsonString(json:String) -> AnyObject?{ let jsonData:NSData? = json.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) if jsonData == nil { return nil } var error: NSError? = nil let data:AnyObject? = NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.AllowFragments, error: &error) if error != nil { return nil } return data } //------------------ send -------------------- func sendHttpGetRequestWithURL(url:String,queryDic:Dictionary<String,String>?) -> NSURLConnection?{ self.storedData = NSMutableData() var queryString:String = "" if queryDic != nil { queryString = "?" + self.getUrlEncodedQueryStringByDic(queryDic!) } let request:NSURLRequest = NSURLRequest(URL: NSURL(string: url + queryString)!) return NSURLConnection(request: request, delegate: self) } func sendHttpPostRequestWithURL(url:String,queryDic:Dictionary<String,String>?) -> NSURLConnection?{ self.storedData = NSMutableData() let request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string:url)!) request.HTTPMethod = "POST" request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData request.timeoutInterval = 20 request.HTTPShouldHandleCookies = false request.HTTPBody = self.getQueryStringByDic(queryDic!).dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! return NSURLConnection(request: request, delegate: self) } func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) { println(response) } func connection(connection: NSURLConnection, didReceiveData data: NSData) { self.storedData?.appendData(data) } func connection(connection: NSURLConnection, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge) { //basic認証のid,passを求められたら if challenge.previousFailureCount == 0 { let newCredential:NSURLCredential = NSURLCredential(user: "userID", password: "password", persistence: NSURLCredentialPersistence.ForSession) challenge.sender.useCredential(newCredential, forAuthenticationChallenge: challenge) }else{ //認証失敗 println("authentication failed") } } func connectionDidFinishLoading(connection: NSURLConnection) { let jsonString:String? = NSString(data: self.storedData!, encoding: NSUTF8StringEncoding) if jsonString == nil { println("connectionDidFinishLoading Failed 1") return } let json:AnyObject? = self.getDataByJsonString(jsonString!) if json == nil { println("connectionDidFinishLoading Failed 2") return } if json is Dictionary<String,AnyObject> { println("json is Dictionary") self.logDic(json as Dictionary<String,AnyObject>) }else if json is [AnyObject] { println("json is Array") self.logArray(json as [AnyObject]) } } private func logDic(dic:Dictionary<String,AnyObject>){ for key:String in dic.keys { println("\(key) : \(dic[key])") } } private func logArray(list:[AnyObject]){ for (i:Int,obj:AnyObject) in enumerate(list) { println("\(i) : \(obj)") } } }
実行
var reqdic:Dictionary<String,String> = Dictionary() reqdic["sendDatetime"] = self.getDeviceDatetimeString() reqdic["message"] = "どうしてもつかまるです。むぎちゃ。" let reqm:RequestManager = RequestManager() //GET reqm.sendHttpGetRequestWithURL("/php/50/index.php", queryDic: reqdic) //POST reqm.sendHttpPostRequestWithURL("/php/50/index.php", queryDic: reqdic)
PHP
$tmp=array("yourData" => "none" ); if(!empty($_GET)){ $tmp["yourData"]=$_GET; $tmp["method"]="GET"; }else if(!empty($_POST)){ $tmp["yourData"]=$_POST; $tmp["method"]="POST"; } $tmp["datetime"]=date("Y-m-d H:i:s"); $tmp["randomStr"]=getRandomStr(48); $tmp["name"]="john"; $tmp["place"]="newyork"; $tmp["device"]="iPhone5s"; header("Content-Type: application/json; charset=utf-8"); echo json_encode($tmp); exit; function getRandomStr($length=8){ $str=''; for ($i = 0, $str = null; $i < $length; ) { $num = mt_rand(0x30, 0x7A); if ((0x30 <= $num && $num <= 0x39) || (0x41 <= $num && $num <= 0x5A) || (0x61 <= $num && $num <= 0x7A)) { $str .= chr($num); $i++; } } return $str; }
出力結果
<NSHTTPURLResponse: 0x7fcd5ad0ec20> { URL: /php/50/index.php } { status code: 200, headers { Connection = "Keep-Alive"; "Content-Type" = "application/json; charset=utf-8"; Date = "Tue, 09 Jun 2015 10:24:37 GMT"; "Keep-Alive" = "timeout=5, max=100"; Server = Apache; "Transfer-Encoding" = Identity; "X-Powered-By" = "PHP/5.4.32"; } } json is Dictionary yourData : Optional({ message = "Optional(\"\U3069\U3046\U3057\U3066\U3082\U3064\U304b\U307e\U308b\U3067\U3059\U3002\U3080\U304e\U3061\U3083\U3002\")"; sendDatetime = "Optional(\"2015-06-09 19:24:38\")"; }) device : Optional(iPhone5s) place : Optional(newyork) method : Optional(POST) datetime : Optional(2015-06-09 19:24:37) randomStr : Optional(LM3HqZ3X2GG6nQ9APqZ67gSud3mbLjHMzjTommuH0gwaxsMN) name : Optional(john)
デバイスの時刻取得
private func getDeviceDatetimeString() -> String{ let date:NSDate = NSDate(timeIntervalSinceNow:NSTimeInterval(NSTimeZone.systemTimeZone().secondsFromGMT)) var form:NSDateFormatter = NSDateFormatter() form.calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar) form.dateFormat = "yyyy-MM-dd HH:mm:ss" form.timeZone = NSTimeZone(forSecondsFromGMT: 0) form.locale = NSLocale(localeIdentifier: "en_US_POSIX") return form.stringFromDate(date) }