<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/ios_memo/">
    <title>ios_memo @ ウィキ</title>
    <link>http://w.atwiki.jp/ios_memo/</link>
    <atom:link href="https://w.atwiki.jp/ios_memo/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>ios_memo @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2017-12-06T17:04:29+09:00</dc:date>
    <utime>1512547469</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/3.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/4.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/ios_memo/pages/5.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/12.html">
    <title>メモ</title>
    <link>https://w.atwiki.jp/ios_memo/pages/12.html</link>
    <description>
      **気づいた点をまとめておく（いずれページなどでまとめる）

**View.bounds.width / heightの罠
[[AutoLayout]]で設定した値が反映するタイミングが
UIViewController::viewDidLoad()メソッドではない。
ではどこでというと
UIViewController::viewDidLayoutSubviews()メソッドである
viewのサイズを取得してうんちゃらするなら 上記のメソッドで行う

参考url
https://ja.stackoverflow.com/questions/21874/swift-autolayout%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9Fview%E3%81%AE%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

**View.draw() メソッドで描画できるオブジェクト

線
四角形
画像
テキスト
曲線

参考url
http://llcc.hatenablog.com/entry/2017/05/04/001356

**タッチ入力のイベントメソッドについて
iosのタッチ入力で標準サポートしているのは
・タッチ開始
・タッチ中に移動
・タッチ終了
これらのイベントメソッドが用意してある。

参考url
[[UIViewControllerクラスのタッチイベントについて&gt;https://i-app-tec.com/ios/image-drag.html]]

**入力の便利ライブラリ UIGestureRecognizer
-タップ
-ダブルタップ
-フリック
-ドラッグ
-ピンチ
-ローテイト
-ロングプレス
-エッジ

これら8種類の機能をサポートする

直でコード実装しなくても
Stroyboard上から機能を付与することもできる

[[入力の実装例&gt;http://yuu.1000quu.com/8_types_of_uigesturerecognizer]]

**StroyboardのOutlet Collection について
名前の通り Outlet を Collection するもの
Outletの数がたくさんできると管理が大変なので一つの変数にまとめて管理しやすいようにしている

参考url
[[OutletCollectionの実装例&gt;http://hajihaji-lemon.com/smartphone/swift/outlet-collection/]]

**UIViewの描画イベントメソッド呼び出し方法
UIViewクラスの描画メソッドには色々ある
描画メソッドをキックするには
UIView.setNeedsDisplay()メソッドを呼び出す

参考url
[[描画更新について対処方法(objectv-c言語で実装している)&gt;https://qiita.com/mito_log/items/82b5f974e4b079bda3a6]]

**UIViewのinitをオーバーライドする方法
UIViewクラスを継承してinitメソッドをオーバーライドしたいケースがあると思う
#highlight {
class UIChildView: UIView {

  overried func init() {
  }
}
}
こんな風にすると思うが、これではエラーになる

***エラーの原因
UIViewクラスは initメソッドに require 識別子がついている
この識別子が付いていると継承先で init メソッドを overried するとエラーになる

***エラー回避方法
require 識別子が付いている init メソッドを overried する
#highlight {
class UIChildView: UIView {
 overried funct init() {
 
 }

  // ↓エラー回避のため追加
  required init?(coder aDecoder: NSCoder) {
      fatalError(&quot;init(coder:) has not been implemented&quot;)
  }
}

***追加したメソッドはどのケースで呼ばれる
Stroyboard / xid の配置したUIViewが初期化した時に呼ばれるメソッドらしい
コード上のみで初期化では呼ばれない
fatalErrorメソッドをつけているのはコード上以外で呼ばれた場合はエラーにするため

参考にしたサイト
[[subclassの初期化&gt;https://qiita.com/tkuma/items/0187f819e49c47bb9873]]

**swift3.0以降のクラスのアクセス指定子
3.0より前とは違うので注意
- private : 定義したスコープ内でしか扱えない
- open: c/c++ の public と同じ
- public: 別モジュールでは継承やオーバライドができない
- fileprivate: c/c++ の private と同じ
- internal: 同じモジュールのみアクセス可能

参考サイト
[[swift3.0以降のクラスアクセスコントロール&gt;https://qiita.com/hironytic/items/6cc68ca93b428ba9194e]]    </description>
    <dc:date>2017-12-06T17:04:29+09:00</dc:date>
    <utime>1512547469</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/13.html">
    <title>AutoLayout</title>
    <link>https://w.atwiki.jp/ios_memo/pages/13.html</link>
    <description>
      *Autolayoutについてまとめる

*AutoLayout
Storyboardという画面に配置するオブジェクトに対して
制約を与えることで、
可変の画面サイズでも配置が崩れれないようにすることができる。

**トピックス
-[[StroyboardにAutoLayout設定が有効化]]
-[[Storyboardのプレビューを開く方法]]

マージンとは余白のこと
パーツに左右上下に余白に制約値値を設定して他のパーツ位置とを比較して相対位置を設定
余白サイズから指定したオブジェクトとの相対位置になる
手動で位置が変わると崩れる

※注意
一度設定して直すの場合はパーツ全体の更新が必要
パラメータを変わっただけではパーツの配置は更新しない

パーツのサイズが自動で変わるパーツもある
-TextLabel
-Button
-TextField

StackViewパーツで複数のパーツをひとまとめにして配置ができる
-メリット
一列に横並び・縦並びのケースだと親パーツとして扱える

TextField
制約をつけてサイズが変更するとエラーになるケースがある。
これは制約を受けた他のパーツでうまくサイズ調整ができないから（なんでかはわからない）
-対応方法
制約を受けたパーツのhugglingの値を変更する

異なる画面でレイアウトを変更することができる。
使うかな？    </description>
    <dc:date>2017-12-06T09:54:12+09:00</dc:date>
    <utime>1512521652</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/16.html">
    <title>swift</title>
    <link>https://w.atwiki.jp/ios_memo/pages/16.html</link>
    <description>
      **概要
iosアプリを作成するプログラミング言語のこと
objectv-cに変わって主流になっている。
2014年に登場したので、まだ若い言語
でも大人気
モダンで実行が高速

対象バージョン
swift4(2017/12/4までは最新)

開発環境
xcode (試した時は9.1)
mac (osはSierra)

言語を試す環境
Playgroundというコード記述ワークスペースがある。
コードを記述したらすぐに実行できる。
試すには最適な環境


基本的な書き方
構文の末に ; をつけてもいいしつけなくてもいい
if / switch では {} でくくってはいけない
なぜなら optional binding ができなくなるから
switch だとコンパイルエラーになる

変数
構文に色々なパターンがある
・型宣言パターン
var 変数名: 型名
ex)
var num: Int
var text: String

・型が不定で代入時に自動で決まるパターン
注意：宣言と同時に値を代入しないとエラーになる
ex)
var num = 10 // 自動で型がintに

定数
構文に色々なパターンがある
・let 定数名: 型名
ex)
let num: int
num = 10 // 一度だけ代入が可能
num = 20 // エラーになる

・型が不定で代入時に自動で決まるパターン
注意：宣言と同時に値を代入しないとエラーになる
ex)
let num = 10 // 自動で型がintに

型キャスト
文字列 to 数字
var stringTonum = Int(&quot;4&quot;)!

注意
int(文字列)の戻り値は optinal型なので unwrappyする必要がある。

数字 to 文字列
var intTostring = String(3)

文字列の場合はクラスのインスタンスをそのまま返すので optinal unwrappy はいらない

optinal
要約
nil代入を許可する定数・変数の特殊型のこと

宣言方法
var x: int?
x = nil

var y: Int
y = nil // コンパイルエラーになる

if文

if x == 0 {
}
else {
}

C/C++とほぼ変わらない
違いは条件文に () がないくらい
()をつけることもできるが optinal binding を使うとエラーになる

三項演算子が使える
ex)
print( y == 10 ? &quot;ok&quot; : &quot;ng&quot;)

optinal bindding
optinal型で nil チェックをして同時に変数に代入してその変数を扱う仕組み
nilチェックと値がある時の変数代入を同時にしてくれる

ex)
#highlight() {

var opTest: Int? = nil
opTest = 3
if let n = opTest {
    print(&quot;\(n)&quot;)
}

}

switch文

ex)
#highlight() {
switch( y ) {
case 1:
    print(&quot;1&quot;)
    
case 2:
    print(&quot;2&quot;)

    // 複数指定
case 3, 4:
    print(&quot;3/4&quot;)
    
    //5 ~ 9までの値が対象
case 5..&lt;10:
    print( y )

    // 10 ~ 12までの値が対象
case 10...12:
    print(y)
    
    // caseに該当しない時
default:
    break;
}

}

while文

for文

配列

タプル

集合

辞書

関数

class
クラス継承
クラス static 
クラスのメソッド
クラスのメソッドのoverride
クラスのメソッドのfinal
クラスのプロパティのゲッター・セッター

protcol

extension

クラス型は参照・int/double/bool/構造体は値渡し

列挙型

構造体

guard

例外処理

ジェネリクス

optinal claining

impilcit unwrappy optinal

試したコード
#highlight(){{
// 定数
let msg = &quot;test&quot;;
let testing: String;
let testing2: String;

var x = &quot;go&quot;;
x = String(5);

print(x);
// 文字列に変数を埋め込むには \(変数) にする必要がある
print(&quot;msg is \(msg)&quot;);

// 定数は宣言だけすると一度だけ代入することが可能（C・C＋＋にはないっすわ〜）
testing = &quot;testing&quot;;

if( msg == &quot;test&quot; )
{
    testing2 = &quot;testing2 : true&quot;;
}
else
{
    testing2 = &quot;testing2 : false&quot;;
}
print(testing2);

var textNumber: String = &quot;5&quot;;
// 変数・定数に直接代入する場合は!をつけてoptional型から変換した型に直す
let y = Int(textNumber)!;
print(y);

// 数値に変換して定数の代入もしてくれる
if let number = Int(textNumber)
// 下記の方法ではエラーとなる
// かっこ内で定数の参照範囲が閉じているから、それを考えるとかっこはない方がいいね
//if( let number = Int(textNumber) )
{
    print(&quot;変換成功&quot;);
}

// switch
let testSwitchNum = 30;

switch testSwitchNum
{
case 0:
    print(&quot;0&quot;);
   
// 複数指定が可能
case 1, 2, 3:
    print(&quot;1, 2, 3&quot;);
   
// 数字の場合だと min...max で指定できる
case 4...6:
    print(&quot;4/5/6&quot;);
    
// 数字の場合だと min..&lt;max でmaxは含めないようにできる
case 7..&lt;9:
    print(&quot;7/8&quot;);
    
// 条件に一致した場合 n 変数に代入して処理が書ける
case let n where n &gt; 20:
    print(&quot;\(n) is huge!&quot;);
    
default:
    break;
}

// ループ条件
// ある要素全てを舐めるものになっている
for i in 0...3
{
    print(i)
}

// この書き方はNG
//for i in 2
//{
//    print(i)
//}
//
var i = 0
while i &lt; 3
{
    print(i);
    i += 1
}

// nilを変数・定数に代入するには optional 識別子を追加する
// optional 識別子はswift4 ではなくなっている
// 代わりに型のサフェックスに? / ! をつけることになった。
var testOptional: String!
testOptional = String(&quot;success2&quot;)

/*
 optional て何？
 変数・定数にnilを代入できる特殊な型
*/

// 条件文にoptional変数を行い、かつ代入をするこのやり方を optional binding という
if let inOptional = testOptional
{
    print(inOptional)
}
else
{
    print(&quot;testOptional is nil&quot;)
}

// 配列
var array = [10, 20]
for num in array
{
    print(num)
}

// 空の配列を作成
var names = [String]()
names.append(&quot;kuronokur&quot;)
names.append(&quot;tonakai&quot;)
names.append(&quot;the end&quot;)

print(names.isEmpty)
print(names.count)
for name in names
{
    print(name)
}

// 配列の初期設定
var numarray: [Int] = [1, 2, 3]
for num in numarray
{
    print(num)
}

// タプル
// 各要素に名前付きの変数を定義できる
// pythonと違って代入できる
/*
    特徴
        各要素に名前付き変数が定義
        各要素を一つずつ変数に代入できる
        各要素の型はバラバラで問題なし！
 */
var tapul = (index1: &quot;test&quot;, index2: 2)
print(tapul)
print(tapul.index1)
print(tapul.index1)

// タプルの要素を個別に代入することができる
var (text, _) = tapul
print(&quot;text is \(text)&quot;)

// 集合
// 要素の順序はバラバラになる
/*
    和集合・積集合・差集合などもできる
 */
var setting: Set&lt;Int&gt; = [1, 3, 4]
print(setting)
print(setting.isEmpty)
print(setting.contains(1))
setting.insert(4)
setting.insert(10)
print(setting)

setting.remove(1)
print(setting)

var setA: Set = [1, 2, 5, 6, 7]
var setB: Set = [3, 4, 5]

print(setA.union(setB))
print(setA.intersection(setB))
print(setA.subtracting(setB))

// 辞書
var dic = [&quot;test&quot;: 1, &quot;test2&quot;: 2]
for (key, value) in dic
{
    print(&quot;\(key), \(value)&quot;)
}
print(dic[&quot;test&quot;] ?? &quot;n.a&quot;)

var dicEmpty = [String: Int]()
print(dicEmpty.isEmpty)
dicEmpty[&quot;yamada&quot;] = 10
print(dicEmpty.isEmpty)

// 関数
func sayHi()
{
    print(&quot;hi&quot;)
}

// 戻り値の書き方は Objectv-C に似ている
func sayHi2() -&gt; String
{
    return &quot;hi2&quot;
}
print(sayHi2())

// 関数の引数
// 引数名の前にラベル付けができる
func sayHi3(from name: String)
{
    print(&quot;hi \(name)&quot;);
}

// ラベル指定して引数値を指定
sayHi3(from: &quot;tonakai&quot;)

// 引数名の前にラベルなしができる
// _ をつけることでラベルなしにできる
func sayHi4(_ name: String)
{
    print(&quot;hi \(name)&quot;)
}

// ラベルなしで引数値を指定
sayHi4(&quot;tonakai&quot;)

// 関数の引数 inout
// 要するにポインタです。
func addNumber(num: inout Int)
{
    num += 10
    print(num)
}

var addNum: Int = 5
addNumber(num: &amp;addNum)
print(addNum)

// プロトコルはクラスの雛形ですね。
// インターフェイスを定義する
protocol Pritable {
    // getのみなら定数とする
    var type: String { get }
    var counter: Int { get set }
    func printout()
}

// クラスについて
class User : Pritable
{
    let type = &quot;Laser&quot;
    var counter: Int = 10
    func printout() {
        self.counter += 1
        print(&quot;\(self.type), \(self.counter)&quot;)
    }
    
    let name: String
    var score: Int {
        // プロパティが変化するとキックする関数
        // イニシャライズでは呼ばれないです。
        //   C#にこんな機能はないっす。どちらかというとUE4よりの機能
        willSet {
           // プロパティが変わる前
            // newValueで変更後の値
           print(&quot;\(score) -&gt; \(newValue)&quot;)
        }
        
        didSet {
            // プロパティが変わった後
            // oldValueで変更前の値
            print(&quot;Changed -&gt; \(score - oldValue)&quot;)
        }
    }

    // C#のようにゲッター・セッターのプロパティを実装可能
    var level: Int {
        get {
            return 10
        }
        
        set {
            score = 10
        }
    }
    
    // ゲッターのみを作れる
    var level2: Int {
        return 30
    }

    //static var count: Int = 0
    static var count: Int = 0
    
    init(_ name: String, _ score: Int)
    {
        // プロパティを参照する時はクラスの所有とみなすために self. をつけるのがいい
        self.name = name
        self.score = score
        
        User.count += 1
    }

    init()
    {
        // プロパティを参照する時はクラスの所有とみなすために self. をつけるのがいい
        self.name = &quot;me&quot;
        self.score = 100
       
        User.count += 1
    }
    
    //  継承先で override ができないようにする
    final func sayHi() {
        print(&quot;hi&quot;)
    }
    
    // staic method を継承先で override するには static -&gt; classに変える
    class func getInfo() {
        print(&quot;\(User.count) is instances&quot;)
    }
}

class AdminUser : User {
    // 基本クラスのメソッドを派生させる
//    override func sayHi() {
//        super.sayHi()
//        print(&quot;hello&quot;)
//    }
    
    // 基本クラスの static method をoverride している
    override class func getInfo() {
        print(&quot;Admin \(User.count) is instances&quot;)
    }
}

User.getInfo()
var user = User()
print(user.name)
print(user.score)
user.score = 12
user.sayHi()
User.getInfo()

AdminUser.getInfo()
var adminUser = AdminUser()
adminUser.sayHi()
AdminUser.getInfo()
adminUser.printout()

// 型キャスト
let users = [User(), AdminUser()]
for cast_user in users {
    if cast_user is AdminUser {
        // クラス型のチェックができる
    }
    
    // 型キャストして optinaol bindding している
    if let u = cast_user as? AdminUser {
        print(u.name)
    }
}

// 拡張
// 既存のクラスにプロパティを追加することができる
extension String {
    var length: Int {
        return self.count
    }
}

var textName: String = &quot;textName&quot;
print(textName.length)

// protcol型で宣言した関数を定義をすることができる
protocol ExtensionTest {
    func msg()
}

// 継承先で関数を定義することなくイケル！
extension ExtensionTest {
    func msg() {
        print(&quot;msg&quot;)
    }
}

class ExtensionTestClass: ExtensionTest {
}

var extensionTestClass = ExtensionTestClass()
extensionTestClass.msg()

// Int, double, float, boolなどの型で変数を代入する時は値のコピーをして代入元の中身に影響を与えない
// しかしクラスは参照になるので、代入元の値が変わると代入先の値も変わる。
// 当然代入先の値が変わると、代入元の値も変更されるので注意！
// クラスで値をコピーしたい場合はどないせいと？

// 構造体
protocol SandBoxDataInterface {
    mutating func msg2()
}
// クラス用に書けてかつ型の変数で代入すると値渡しになる
// protocol はイケル
// でも継承はだめ
struct SandBoxData: SandBoxDataInterface {
    var name: String
    
    init() {
        self.name = &quot;test&quot;
    }
    
    // method がくせ 関数構文の先頭に mutating 識別子をくっつける
    mutating func msg() {
        print(&quot;\(self.name)&quot;)
    }
    
    mutating func msg2() {
        print(&quot;msg2 is \(self.name)&quot;)
    }
}

var instanceSandBoxData = SandBoxData()
var instanceSanbBoxData2 = instanceSandBoxData
instanceSandBoxData.name = &quot;sand&quot;
instanceSandBoxData.msg()
instanceSanbBoxData2.msg()
instanceSanbBoxData2.msg2()

// 列挙型
enum Direction {
    case right
    case left
}

var dir: Direction
dir = .right
dir = Direction.right
switch( dir ) {
    case Direction.left:
        print(Direction.left.hashValue)
case Direction.right:
    print(Direction.right.hashValue)
}

// enum に値を割り当てることも可能
enum DirectionValue: Int {
    case right = 1
    case left = -1
}

// 割り当てた値を表示するには rawValue プロパティでOK
print(DirectionValue.right.rawValue)

// ジェネリクスとは型を汎用化すること
func putData&lt;T&gt;(_ data: T) {
    print(data)
}

// 引数の型が汎用なのでどの型の値を設定できる！
// c++ だと func&lt;型&gt;(引数) でした！
putData(1)
putData(&quot;msg&quot;)
putData(2.3)

// early return style
// これは変数が異常値の場合すぐにreturnを返すスタイル
// ↓こんな感じ
//if x == nill {
//    return
//}
// やり方は知っていたが名称については今知った！

// guard ealry return を描きやすくしてくれる
func guardTestEalryReturn(x: String?) {
//    if( x == nil ) {
//        print(&quot;x is nil&quot;)
//        return
//    }
//    // 上のやり方もありですが
//    // nil 以外のケースではどうする
//    print(x!)
    // こうすればuncapeして扱えるが、忘れそう
    // guard を使うと解決する
    // guard を使うと early return 形式を簡単わかりやすく書ける
    // optional bindding も使える！
    guard let n = x else {
        // x が異常ならここにくる
        print(&quot;x is nil&quot;)
        return
    }
    
    // x が正常なら n に値が代入されて uncape を明示しないで使える
    // いえ〜い
    print(n)
}

guardTestEalryReturn(x: &quot;success&quot;)

// 例外処理
// enumでエラー定義をする場合は Error を継承する必要がある
enum LoginError: Error {
    case error1
    case error2
}

class Login {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    // guard と 例外処理の合わせ技
    func login() throws {
        /*
            guard 成功条件 else {
                // 失敗時の処理
            }
        */
        guard self.name != &quot;&quot; else {
            throw LoginError.error1
        }
        
        guard self.name.length &gt; 5 else {
            throw LoginError.error2
        }
        
        print(&quot;login success&quot;)
    }
}

var log = Login(name: &quot;tanaka&quot;)
do {
    try
        log.login()
}
catch LoginError.error1 {
    print(&quot;error1&quot;)
}
catch LoginError.error2 {
    print(&quot;error2&quot;)
}

// optinal chaining
// nil 許容した optional を使う時に nilチェック処理で複雑になるのを簡潔するためのもの
class OptinalChainingTest {
    // optinal型(nilを認める)
    var name: String? = nil
}

var optinalChainingTest = OptinalChainingTest()
if let name = optinalChainingTest.name {
    print( name )
}
var optinalChainingText2: OptinalChainingTest?
optinalChainingText2 = OptinalChainingTest()

// 正しく nil チェックするならこうする
if let o = optinalChainingText2 {
    if let name = o.name {
        print( name )
    }
}
// でもネストがうぜ〜
// optinal型によるプロパティが増えるたびにこうなりえるのでそれは避けたい
// これを避けるために optinal chaining がある。
// optinal変数を参照する時は名前の後ろに ? をつける
// 仮に nil だとしてもハングすることがない
if let s = optinalChainingText2?.name?.uppercased() {
    print(s)
}
// optinal型宣言の? と optinal chainingの? は別物

// implictity unwraap optional
// ? -&gt; ! にするとoptinal型だけど使用する時にわざわざ ! をつけて unwrappy することはなくなる
// 結構使われているようだ！
var testMsg: String!
testMsg = &quot;test&quot;
if testMsg != nil {
    print(testMsg)
}

}}    </description>
    <dc:date>2017-12-05T15:10:38+09:00</dc:date>
    <utime>1512454238</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/ios_memo/pages/2.html</link>
    <description>
      **メニュー
-[[トップページ]]
-[[AutoLayout]]
-[[swift]]
-[[メモ]]

----

**リンク
-[[@wiki&gt;&gt;http://atwiki.jp]]
-[[@wikiご利用ガイド&gt;&gt;http://atwiki.jp/guide/]]

// リンクを張るには &quot;[&quot; 2つで文字列を括ります。
// &quot;&gt;&quot; の左側に文字、右側にURLを記述するとリンクになります


//**更新履歴
//#recent(20)

&amp;link_editmenu(text=ここを編集)    </description>
    <dc:date>2017-12-05T11:19:30+09:00</dc:date>
    <utime>1512440370</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/15.html">
    <title>Storyboardのプレビューを開く方法</title>
    <link>https://w.atwiki.jp/ios_memo/pages/15.html</link>
    <description>
      **Storyboardのプレビューを開く方法
+アシスタントエディターを開く
- アシスタントエディターボタンを押す
#image(autolayout_002.png)

+Automatic -&gt; prevview を選択
- アシスタントエディターをprevviewモードに切り替える
#image(autolayout_003.png)
#image(autolayout_004.png)

+prevview画面の左下の+を押してプレビュー画面の機種を選択
#image(autolayout_005.png)
- prevview画面の機種を選択する
#image(autolayout_006.png)    </description>
    <dc:date>2017-12-04T15:48:13+09:00</dc:date>
    <utime>1512370093</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/14.html">
    <title>StroyboardにAutoLayout設定が有効化</title>
    <link>https://w.atwiki.jp/ios_memo/pages/14.html</link>
    <description>
      **AutoLayoutを有効化か確認する方法
***確認方法
+Stroyboardのファイルを選択
+ユーティリティエリアのFileInspector を開く
+Interface Builder Document プロパティの「Use Auto Layout」にチェックがついているか確認
#image(autolayout_001.png)    </description>
    <dc:date>2017-12-04T15:46:57+09:00</dc:date>
    <utime>1512370017</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/ios_memo/pages/1.html</link>
    <description>
      *ios開発についての情報    </description>
    <dc:date>2017-12-04T09:45:18+09:00</dc:date>
    <utime>1512348318</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/3.html">
    <title>右メニュー</title>
    <link>https://w.atwiki.jp/ios_memo/pages/3.html</link>
    <description>
      **更新履歴
#recent(20)


&amp;link_editmenu2(text=ここを編集)
    </description>
    <dc:date>2017-12-04T09:44:29+09:00</dc:date>
    <utime>1512348269</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/4.html">
    <title>プラグイン/ニュース</title>
    <link>https://w.atwiki.jp/ios_memo/pages/4.html</link>
    <description>
      * ニュース
@wikiのwikiモードでは
 #news(興味のある単語)
と入力することで、あるキーワードに関連するニュース一覧を表示することができます
詳しくはこちらをご覧ください。
＝＞http://www1.atwiki.jp/guide/pages/266.html#id_542badf7


-----


たとえば、#news(ゲーム)と入力すると以下のように表示されます。


#news(ゲーム)
    </description>
    <dc:date>2017-12-04T09:44:29+09:00</dc:date>
    <utime>1512348269</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/ios_memo/pages/5.html">
    <title>プラグイン/編集履歴</title>
    <link>https://w.atwiki.jp/ios_memo/pages/5.html</link>
    <description>
      * 更新履歴
@wikiのwikiモードでは
 #recent(数字)
と入力することで、wikiのページ更新履歴を表示することができます。
詳しくはこちらをご覧ください。
＝＞http://www1.atwiki.jp/guide/pages/269.html#id_bf9eaeba


-----


たとえば、#recent(20)と入力すると以下のように表示されます。


#recent(20)
    </description>
    <dc:date>2017-12-04T09:44:29+09:00</dc:date>
    <utime>1512348269</utime>
  </item>
  </rdf:RDF>
