メモ:SwiftUI基本
メモ
SwiftUIの基本コード
SwiftUIの超単純コードを示します。
ファイルはContentViews.swiftです。
import SwiftUI struct ContentView: View { // @Stateは変更をモニターする指定です。画面に反映されます。 @State private var x:Int=0; // View{...}内には動作記述は置けません、View要素をただ1個だけ置きます。 var body: some View { // Viewを縦に並べます。要素の切れ目は;です。 VStack { // Buttonを押した動作はaction:{...}に書きます Button("call ",action: { self.x+=1 }); // \(...)に変数を置けば文字列として展開されます Text("Hello, world! \(self.x)").padding() } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }

右のような表示となります。
ボタンを押すと数値カウントアップが行われ、画面に反映されます。
Xcodeでは円マークと逆スラッシュは別になります。
エディタで作成したコードを入れる場合注意が必要です。文句をいっても仕方ありません。Macは技術ではなく宗教です。
Macでは逆スラッシュはOption-円マークで入ります。
deleteはFn-deleteです。
Macは字を入れるのが大変です。
HTTPS/POSTクライアント
HTTPSでPOSTする超単純例を示します。
この例ではサーバをxx.xx.xx.xxとしています。
サーバが自己認証であってもつながるようにしています。細かい説明は後日追加します。
このプログラムはJSON{"number":"カウンタ値"}を送り、戻り値を画面に表示しています。
対向相手はjsonによるbodyのnumber値を読み込み、json{"result":"OK-読み込んだ値"}を返します。これも後で追加します。
import SwiftUI struct ContentView: View { let session = URLSession(configuration: .default, delegate: AllowsSelfSignedCertificateDelegate(), delegateQueue: nil) @State private var result:String="" @State private var count:Int=0 var body: some View { VStack { Button("call ",action: { sendPOST() }); Text("Hello, world! \(self.result)").padding() } } func sendPOST(){ self.count += 1 let param:[String:Any] = ["number":String(self.count)] let body:Data = try! JSONSerialization.data(withJSONObject: param,options:[]) let url = URL(string: "https://xx.xx.xx.xx")! var request = URLRequest(url: url) request.httpMethod = "POST" request.httpBody = body let task = session.dataTask(with: request) { (data, response, error) in guard let data = data else { return } do { let res:[String:Any] = try JSONSerialization.jsonObject(with: data, options: []) as! [String : AnyObject] print(res) self.result=res["result"] as! String } catch let error { print(error) } } task.resume() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } class AllowsSelfSignedCertificateDelegate: NSObject, URLSessionDelegate { func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { let protectionSpace = challenge.protectionSpace guard protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust, protectionSpace.host == "xx.xx.xx.xx", let serverTrust = protectionSpace.serverTrust else { completionHandler(.performDefaultHandling, nil) return } completionHandler(.useCredential, URLCredential(trust: serverTrust))//許可 } }
| 固定リンク