swift
swiftは整数のオーバーフローに関して厳しめの仕様になっている。 Double, Floatには最大値はほぼない。 Double, Floatは不動小数点表現なので、最大値はほぼないと考えて良い。オーバーフロー制御構文は用意されていない。 DoubleをIntに変換するときにオー…
XVim2というXcodeプラグインのメンテをやっている。 antmdさんによってXcode9に対応され、そこそこ動くようにはなったが、 バージョンアップのたびにどこか壊れるので、PullReqを投げていたら、コミット権を渡された。 XVim2はXcodeでvimキーバインドを使う…
Blake2 というハッシュ関数があります。 MD5,SHA-1などといういわゆるハッシュ関数の仲間です。 特徴としては、MD5,SHA-1,SHA-2,SHA-3よりも計算が高速で、SHA-3と同程度のセキュリティ(衝突耐性など)があるようです。 MD5などとは異なり、seed(key)を指定で…
私が考えるC++/ObjC/swift についてのコーディング規約です。 基本的にコーディング規約はプロジェクトの生産性を最大化するのが目的であり、厳しすぎず、ゆる過ぎないものにするべきです。 以下、箇条書きにしていきます。 守るべき規約 定数は先頭に k の…
iOS版ウォレットアプリにはソースが公開されているものがあります。ソースが公開されていれば、自分で脆弱性があるかどうかを調べたり出来るので、ソースが公開されていないものに比べてその点がメリットです。 いくつかのアプリで外部ライブラリ依存関係を…
swiftコードがどのようにアセンブラに出力されているのかをみてみましょう。 Xcodeのプロジェクトで、コマンドラインプロジェクトを生成し、以下のソースをmain.swiftに書き込みます。 import Foundation func plus(_ a: Int64, _ b: Int64) -> (Int64) { re…
NSView をvoidに変換するのはObjective-Cですが、これはキャストするだけです。 - (void)convert:(NSView*)view { void* ptr = (void*)view; } void*はswiftではUnsafeMutableRawPointerと表現されます。 func convert(p:UnsafeMutablePointer) { let view:N…
Xcode で Module 'xxx' was not compiled for testing メッセージが出た時の対処法です。 リリースビルドで単体テストを実行しようとすると発生します。 Enable Testability を Yes に変更すればOKです。
CoreAudio/swift3で録音を行うサンプルです。 iPhoneのマイクから取得した音声データをレベル値に変換して画面に表示します。 import Foundation import AVFoundation import AudioUnit class MyAudioRecorder: NSObject { var level: Float = 0.0 var frame…
iOS11 Audio関連で追加された機能で気になったものをまとめておきます。 内容はここで見ることができます。 今年からApple Developer登録していない方でもVideoが見られるようになったようです。 (WWDC 2017に見た新しい教材のあり方|MacFan) developer.app…
Xcodeのデバッガではswiftオブジェクトの中身を表示しても生のデータを表示してくれず、デバッグしづらいです。 (C/C++なら大丈夫ですが。) あらゆるものを16進Hex表示の文字列にしてデバッグに使いましょう。 public protocol HexRepresentable { func hexD…
IntegerArithmeticプロトコルを実装するには、以下8つの関数を定義する必要がある。 最初の2つはComparableである。 static func ==(lhs: M, rhs: M) -> Bool static func <(lhs: M, rhs: M) -> Bool static func addWithOverflow(_ lhs: M, _ rhs: M) -> (…
Comparableプロトコルを作るには、 static func <(lhs: Even, rhs: Even) -> Bool static func ==(lhs: Even, rhs: Even) -> Bool の2つを実装すればよい。 struct M : Comparable { var val:Int static func <(lhs: M, rhs: M) -> Bool { return lhs.val <…
Collectionプロトコルを作るには、 startIndexプロパティ,endIndexプロパティ,subscript,index(after:) の4つを実装する必要がある。 Collection - Swift Standard Library | Apple Developer Documentation ここでは奇数を返すコレクションOddを作ってみた…
Sequenceプロトコルの例 ここでは1以上の奇数を順番に返すものを作ってみた。ちなみにIntの範囲を超えるとクラッシュするが気にしないでもらいたい。(^ ^) struct Odd : Sequence, IteratorProtocol { typealias Element = Int private var v:Element = 1 pu…
swiftにはassertさせる関数がいっぱいあって困ります。 1) assert() let ary = [1, 2, 3] let i = 3 assert(i < ary.count) print("\(ary[i])") assertion failed: file /develop/aaa/aaa/ViewController.swift, line 18 2) precondition() let ary = [1, 2,…
swift,C,Javaとruby, python,perlでは、 負数を割り算や剰余に使った場合、結果が異なる。 python 剰余 7 % 3 -> 1 7 % -3 -> -2 -7 % 3 -> 2 -7 & -3 -> -1 swift 剰余 7 % 3 -> 1 7 % -3 -> 1 -7 % 3 -> -1 -7 % -3 -> -1 python 商 7 / 2 -> 3 7 / -2 -> …
環境 ios10.3.1 Xcode 8.3.2 guard let path:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return } let filename0 = path + "/" + "a.txt" if let fp0 = fopen(filename0, "wb") { print("fp0 \…
swift 循環参照の一例を挙げます。 iOSのソースを例にとります。 ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let model = Model() model.action() } } Model.swift im…
RxSwiftとRxCocoaの区別がわかりづらいのでメモ。 RxCocoaはUIKit,NSFoundationなどに特化したiOS/macOS環境特有の機能。 RxSwift combileLatest 仕様:複数の変数のいずれかが変更された場合にそれぞれの最新の値をまとめて受け取る 使い道:2つのUITextField…
class GeolocationViewController: ViewController { @IBOutlet weak private var noGeolocationView: UIView! @IBOutlet weak private var button: UIButton! @IBOutlet weak private var button2: UIButton! @IBOutlet weak var label: UILabel! override …
let minimalUsernameLength = 5 let minimalPasswordLength = 5 class SimpleValidationViewController : ViewController { @IBOutlet weak var usernameOutlet: UITextField! @IBOutlet weak var usernameValidOutlet: UILabel! @IBOutlet weak var passwor…
0)環境: Xcode8.2.1 1) 新規iOSプロジェクトaaaを作成する。 2) aaaフォルダに新規ファイルPackage.swiftを以下の内容で作成する。 import PackageDescription let package = Package( name: "dummy", targets: [], dependencies: [ .Package(url: "https://…
swiftはモダンな言語なので、C言語風の書き方は極力排除されている。 Arrayでwhereがついているメソッドを使い条件式を表すクロージャを指定して結果を取得するケースは多い。 public struct Array<Element> : RandomAccessCollection, MutableCollection { // 条件を</element>…
iOSでWAVファイルを書き出す場合、 以前はAudioToolKitにあるAudioFileCreateWithURLを使っていましたが、 ここでは試しにiOS8,macOS10.10で追加されたAVFoundationにあるAVAudioFileを使ってみます。 まず、AVAudioFileのクラス定義をみてみます。 open cla…
open どこからでもサブクラスの作成、上書き定義可能 public このクラスを定義したモジュール内部でのみサブクラスの作成、上書き定義可能 internal (省略時) 定義を含むソースファイルと同じモジュール内部からアクセス可能 private クラスや構造体の定義単…
こうすればいいらしい。 extension DateFormatter { public static let standard: DateFormatter = { let obj = DateFormatter() obj.locale = Locale(identifier:"en_US_POSIX") return obj }() }
swiftでSingletonを書く場合、こうすればいいらしい。 class MySingleton { static let shared = MySingleton() private init() {} } The Right Way To Write a Singleton — KrakenDev
CoreAudioでよく使われるAudioStreamBasicDescription これはC言語の構造体で使いづらいです。 macOS10.10, iOS8以降ではAVAudioFormatと相互変換できますので、これを経由するとコーディングが簡単になります。 まずは実例を見ていきます。 よく使われる.wa…
iOS10で公開されたSpeechフレームワークを使って日本語PodCastをテキスト化してみました。 結果から言うと、テキスト化は可能でしたが、品質はかなり悪く実用として厳しかったです。 某IT系PodCastのファイルを食わせて見たんですが、 「ジャバスクリプト」…