Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

swift

swift Intのオーバーフロー演算について

swiftは整数のオーバーフローに関して厳しめの仕様になっている。 Double, Floatには最大値はほぼない。 Double, Floatは不動小数点表現なので、最大値はほぼないと考えて良い。オーバーフロー制御構文は用意されていない。 DoubleをIntに変換するときにオー…

XVim2のTIPS

XVim2というXcodeプラグインのメンテをやっている。 antmdさんによってXcode9に対応され、そこそこ動くようにはなったが、 バージョンアップのたびにどこか壊れるので、PullReqを投げていたら、コミット権を渡された。 XVim2はXcodeでvimキーバインドを使う…

Blake2b を swift で実装してみた

Blake2 というハッシュ関数があります。 MD5,SHA-1などといういわゆるハッシュ関数の仲間です。 特徴としては、MD5,SHA-1,SHA-2,SHA-3よりも計算が高速で、SHA-3と同程度のセキュリティ(衝突耐性など)があるようです。 MD5などとは異なり、seed(key)を指定で…

C++/ObjC/swift コーディング規約

私が考えるC++/ObjC/swift についてのコーディング規約です。 基本的にコーディング規約はプロジェクトの生産性を最大化するのが目的であり、厳しすぎず、ゆる過ぎないものにするべきです。 以下、箇条書きにしていきます。 守るべき規約 定数は先頭に k の…

iOSウォレットアプリ外部ライブラリ依存関係

iOS版ウォレットアプリにはソースが公開されているものがあります。ソースが公開されていれば、自分で脆弱性があるかどうかを調べたり出来るので、ソースが公開されていないものに比べてその点がメリットです。 いくつかのアプリで外部ライブラリ依存関係を…

swiftとアセンブラ

swiftコードがどのようにアセンブラに出力されているのかをみてみましょう。 Xcodeのプロジェクトで、コマンドラインプロジェクトを生成し、以下のソースをmain.swiftに書き込みます。 import Foundation func plus(_ a: Int64, _ b: Int64) -> (Int64) { re…

Objective-Cとswift3 で NSView* を void* に変換してまたNSView*に戻す

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 メッセージが出た時の対処法

Xcode で Module 'xxx' was not compiled for testing メッセージが出た時の対処法です。 リリースビルドで単体テストを実行しようとすると発生します。 Enable Testability を Yes に変更すればOKです。

swift3でCoreAudioを使う 録音編

CoreAudio/swift3で録音を行うサンプルです。 iPhoneのマイクから取得した音声データをレベル値に変換して画面に表示します。 import Foundation import AVFoundation import AudioUnit class MyAudioRecorder: NSObject { var level: Float = 0.0 var frame…

iOS11 Audio関連機能(2017)

iOS11 Audio関連で追加された機能で気になったものをまとめておきます。 内容はここで見ることができます。 今年からApple Developer登録していない方でもVideoが見られるようになったようです。 (WWDC 2017に見た新しい教材のあり方|MacFan) developer.app…

swift であらゆるデータをHex表示してデバッグする

Xcodeのデバッガではswiftオブジェクトの中身を表示しても生のデータを表示してくれず、デバッグしづらいです。 (C/C++なら大丈夫ですが。) あらゆるものを16進Hex表示の文字列にしてデバッグに使いましょう。 public protocol HexRepresentable { func hexD…

swift3 IntegerArithmaticプロトコル

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) -> (…

swift3 Comparableプロトロル

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 <…

swift3 Collectionプロトコル

Collectionプロトコルを作るには、 startIndexプロパティ,endIndexプロパティ,subscript,index(after:) の4つを実装する必要がある。 Collection - Swift Standard Library | Apple Developer Documentation ここでは奇数を返すコレクションOddを作ってみた…

swift3 Sequenceプロトコル

Sequenceプロトコルの例 ここでは1以上の奇数を順番に返すものを作ってみた。ちなみにIntの範囲を超えるとクラッシュするが気にしないでもらいたい。(^ ^) struct Odd : Sequence, IteratorProtocol { typealias Element = Int private var v:Element = 1 pu…

swift preconditionとassertの違い

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,…

swfit/rust 負数の除法

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 ファイルパス問題

環境 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 循環参照

swift 循環参照の一例を挙げます。 iOSのソースを例にとります。 ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let model = Model() model.action() } } Model.swift im…

Rx メモ

RxSwiftとRxCocoaの区別がわかりづらいのでメモ。 RxCocoaはUIKit,NSFoundationなどに特化したiOS/macOS環境特有の機能。 RxSwift combileLatest 仕様:複数の変数のいずれかが変更された場合にそれぞれの最新の値をまとめて受け取る 使い道:2つのUITextField…

RxSwift 超入門その3

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 …

RxSwift 超入門その2

let minimalUsernameLength = 5 let minimalPasswordLength = 5 class SimpleValidationViewController : ViewController { @IBOutlet weak var usernameOutlet: UITextField! @IBOutlet weak var usernameValidOutlet: UILabel! @IBOutlet weak var passwor…

RxSwift 超入門その1

0)環境: Xcode8.2.1 1) 新規iOSプロジェクトaaaを作成する。 2) aaaフォルダに新規ファイルPackage.swiftを以下の内容で作成する。 import PackageDescription let package = Package( name: "dummy", targets: [], dependencies: [ .Package(url: "https://…

swift Arrayでwhereを使う

swiftはモダンな言語なので、C言語風の書き方は極力排除されている。 Arrayでwhereがついているメソッドを使い条件式を表すクロージャを指定して結果を取得するケースは多い。 public struct Array<Element> : RandomAccessCollection, MutableCollection { // 条件を</element>…

swiftでwavファイル書き込みしてみる(AVAudioFIle)

iOSでWAVファイルを書き出す場合、 以前はAudioToolKitにあるAudioFileCreateWithURLを使っていましたが、 ここでは試しにiOS8,macOS10.10で追加されたAVFoundationにあるAVAudioFileを使ってみます。 まず、AVAudioFileのクラス定義をみてみます。 open cla…

swift アクセス制御

open どこからでもサブクラスの作成、上書き定義可能 public このクラスを定義したモジュール内部でのみサブクラスの作成、上書き定義可能 internal (省略時) 定義を含むソースファイルと同じモジュール内部からアクセス可能 private クラスや構造体の定義単…

swift extensionで一回だけ実行されるグローバル定数宣言の仕方

こうすればいいらしい。 extension DateFormatter { public static let standard: DateFormatter = { let obj = DateFormatter() obj.locale = Locale(identifier:"en_US_POSIX") return obj }() }

swiftでsingleton

swiftでSingletonを書く場合、こうすればいいらしい。 class MySingleton { static let shared = MySingleton() private init() {} } The Right Way To Write a Singleton — KrakenDev

詳説 AudioStreamBasicDescription / AVAudioFormat

CoreAudioでよく使われるAudioStreamBasicDescription これはC言語の構造体で使いづらいです。 macOS10.10, iOS8以降ではAVAudioFormatと相互変換できますので、これを経由するとコーディングが簡単になります。 まずは実例を見ていきます。 よく使われる.wa…

iOS10のSpeechToText APIを使って日本語PodCastをテキスト化してみる

iOS10で公開されたSpeechフレームワークを使って日本語PodCastをテキスト化してみました。 結果から言うと、テキスト化は可能でしたが、品質はかなり悪く実用として厳しかったです。 某IT系PodCastのファイルを食わせて見たんですが、 「ジャバスクリプト」…