DispatchQueue.main.async

DispatchQueue.main.asyncでjsonを参照する。

override func viewDidLoad() {
        super.viewDidLoad()
        let stringUrl = "http://hpscript.com/swift/index.php"
        do {
            guard let url = URL(string: stringUrl) else { return }
            URLSession.shared.dataTask(with: url){(data, response, error) in
                if error != nil {
                    print(error!.localizedDescription)
                }
                guard let data = data else { return }
                let json = try! JSONDecoder().decode([JsonSample].self, from: data)
                DispatchQueue.main.async {
                    self.label.text = json[0].name //←ここでjsonを参照する
                }
                }.resume()
            
        } catch{
        }
    }

jsonはcodableを使う。
なるほど!行けるか???行ければandroidへ直ぐにGo

swift4 – mysqlを設計していく

どうしてもやりたい

表示したいこと
Category: Audio Player
Brand: AKG
Name:AKG K77 PERCEPT
Price: 40
condition: 30
Left: 300
Bit : 1

まず、mysqlのテーブルを作っていく

create table product(
 category varchar(255),
 brand varchar(255),
 name varchar(255),
 price int,
 condition varchar(255),
 timeleft int,
 bit int,
);

データを入れる。

INSERT INTO `product` (`category`, `brand`, `name`, `price`, `con`, `tleft`, `bit`) VALUES ('Audio Player', 'AKG', 'AKG K77 PERCEPT', '40', 'new', '300', '1');

sessin.dataTaskにいよるget

override func viewDidLoad() {
        super.viewDidLoad()
        let stringUrl = "http://hpscript.com/swift/index.php"
        let url = URL(string: stringUrl)
        let request = URLRequest(url: url!)
        
        let session = URLSession(configuration: URLSessionConfiguration.default, delegate: nil, delegateQueue: OperationQueue.main)
        
        let task:URLSessionDataTask = session.dataTask(with: request, completionHandler: {(data, response, error) in
            if error != nil {
                print(error!)
                return
            }
            
            DispatchQueue.main.async{
                
            }
        })
        task.resume()
        // Do any additional setup after loading the view, typically from a nib.
    }

Cannon EOS Kiss Digital X

一眼レフの話をしていたら、何故かCannon EOS Kiss Digital Xをいただきました。

少し試し撮りしましたが、630より面白いです。
表現の幅は広げたいですね。

JSONDecoderがうまく行かない

override func viewDidLoad() {
        super.viewDidLoad()
        let listUrl = "http://hpscript.com/swift/index.php"
        do {
            guard let url = URL(string: listUrl) else { return }
            URLSession.shared.dataTask(with: url){(data, response, error) in
                if error != nil {
                    print(error!.localizedDescription)
                }
                
                guard let data = data else { return }
                let json = try? JSONDecoder().decode([JsonSample].self, from: data)
                }.resume()
            
        } catch{
            
        }
        self.label.text = json[0].name
        // Do any additional setup after loading the view, typically from a nib.
    }

なぜだ!!!!?

swift4でmysqlからfetchしたjsonを取得する

まず、mysqlからpdoでselectして、jsonにする。

$response = array();

$dsn = "mysql:dbname=app;host=";
$user = "";
$password = "";
try {
  $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e){
  print('connection failed:'.$e->getMessage());
}


$sql = "select * from swift";
$stmt = $dbh->query($sql);
$i = 0;
foreach($stmt as $value){
	$response[$i]['name'] = $value['name'];
	$response[$i]['member'] = $value['member'];
	$i++;
}


	
echo json_encode($response);

echo "finish";

勿論ここまではOK

問題は、x-codeで取得して、どう表示するか。