SwiftのSingletonパターン
宣言コード
|
1 2 3 4 |
class SomeSingletonClass: NSObject { private init() { 省略 } static let sharedInstance = SomeSingletonClass() } |
参照コード
|
1 |
var someSingletonInstance : SomeSingletonClass = SomeSingletonClass.sharedInstance |
- イニシャライザをprivate修飾してクラスの外部から参照できないようにする。
structを使うのは古いコーディングスタイル。代わりにstatic let構文を使う。static func getSharedInstance()メソッドを使うのは、さらに古いコーディングスタイル。
Swiftのdefineマクロ
Swiftの値型 最小値, 最大値
Swift 3
|
1 2 3 |
CGFloat.leastNormalMagnitude // min, 2.2250738585072e-308 CGFloat.leastNonzeroMagnitude // min, 4.94065645841247e-324 CGFloat.greatestFiniteMagnitude // max, 1.79769313486232e+308 |
|
1 2 3 |
Float.leastNormalMagnitude Float.leastNonzeroMagnitude Float.greatestFiniteMagnitude |
|
1 2 3 |
Double.leastNormalMagnitude Double.leastNonzeroMagnitude Double.greatestFiniteMagnitude |
Use of unresolved identifier
症状
XcodeのユニットテストXCTestのビルドにおいて "Use of unresolved identifier xxxx " とエラーが表示される。
原因
テスト対象のモジュールがイントートされていない。
対応
@testable import xxxxx をテストコードに追記する
xxxTest.swift
|
1 2 3 4 5 6 |
import XCTest + @testable import MyTargetModule class xxxTest: XCTestCase { ... |
[git] リモートリポジトリの操作
ローカルリポジトリで作成したブランチをリモートリポジトリへPUSHする
|
1 2 3 |
$ git checkout -b branch_xxx $ git push origin branch_xxx |
Could not find support-v4.jar
症状
Android Studioでのビルドにおいて以下のエラーが発生する
|
1 2 3 4 |
Error:A problem occurred configuring root project 'xxxx'. > Could not find support-v4.jar (com.android.support:support-v4:24.0.0). Searched in the following locations: https://jcenter.bintray.com/com/android/support/support-v4/24.0.0/support-v4-24.0.0.jar |
[git] コミットの書き換え
A. 直前(1世代前)のコミットを書き換える
1. 編集する(修正する)
|
1 |
$ vim <file> |
2. 修正をステージングする
|
1 |
$ git add <file> |
3. コミットする(修正した内容でコミットをやり直す)
|
1 |
$ git commit --amend |
Custom Types
Swiftの型(Type)に定義したアクセス修飾子(Access Control Level)は、その型のメンバー(プロパティやメソッド、イニシャライザーなど)に影響する。
例えば、private修飾したclassのメンバーの暗黙的(デフォルト)アクセス制限はprivateである。
明示的publicクラス
|
1 2 3 4 5 6 |
public class SomePublicClass { public var somePublicProperty = 0 // 明示的publicクラスメンバー var someInternalProperty = 0 // 暗黙的internalクラスメンバー fileprivate func someFilePrivateMethod() {} // 明示的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
注意
public typeはデフォルトでinternalのメンバーを持つ。publicではない。メンバーのアクセス制御をpublicにするときは、いかなるケースでも明示的にpublic修飾を記述する必要がある。
暗黙的internalクラス
|
1 2 3 4 5 |
class SomeInternalClass { var someInternalProperty = 0 // 暗黙的internalクラスメンバー fileprivate func someFilePrivateMethod() {} // 明示的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
型(クラス)のデフォルトアクセスコントロールはinternal。したがって、その型(クラス)のメンバーのデフォルトアクセス制御もinternalとなる。
明示的fileprivateクラス
|
1 2 3 4 |
fileprivate class SomeFilePrivateClass { func someFilePrivateMethod() {} // 暗黙的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
明示的にクラスにfileprivateを指定しているため、そのクラスのメンバーのアクセス制御もデフォルトではfile-privateとなる。もちろん明示的にprivateを指定したメンバーはprivateになる。
明示的privateクラス
|
1 2 3 |
private class SomePrivateClass { func somePrivateMethod() {} // 暗黙的privateクラスメンバー } |

