[Swift][PDFKit]PDFView表示されている頁番号を取得する

PDFViewに表示されているPDFの頁番号を取得する。
注意:頁番号と言ってもPDF内に書かれている頁番号ではなく、PDFの頁番号です。

pdfViewがPDFViewクラスのインスタンス。

pdfView.currentPage?.pageRef?.pageNumber
  • PDFViewのcurrentPageで表示されているPDFPageを取得。
  • PDFPageのpageRefでCGPDFPageを取得。
  • CGPDFPageのpageNumberで頁番号を取得。
    ドキュメントより
    「Returns the page number of the specified PDF page.」
    「指定されたPDFページのページ番号を返します。」

VisualProgrammingLanguage

どこで見つけたんだろう。WWDCだよな。メモにURLがあったので、記録のためブログにアップ。

GitHub概要説明(Google翻訳)
Swiftで書かれたビジュアルプログラミング言語で、実行可能なSwiftコードにアセンブルされます。
WWDC ’18奨学金の提出。

https://github.com/NathanFlurry/VisualProgrammingLanguage

完成すると面白いアプリだと思います。
開発が継続されると良いですね。

SION(Swift Interchangeable Object Notation):データシリアライゼーションフォーマット

SION(Swift Interchangeable Object Notation):データシリアライゼーションフォーマット

Software Design 2018年9月号
「書いて覚えるSwift入門」
第40回 新しいフォーマット「SION」の紹介


ソフトウェアデザイン 2018年9月号

gihyo.jpに記事が上がっています。
https://gihyo.jp/dev/serial/01/swift-introduction/0040

GitHub
https://github.com/dankogai/SION

階乗進法 factorial representation

改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング。

階乗進法 factorial representation
実行:Playground

let N = 3

func factorial() {
    var c = [Int](repeating: 0, count: N + 2)
    var i = 0
    var k:Int
    repeat {
        print("\(i)", separator: "", terminator: "")
        i = i + 1
        k = N
        while k >= 1 {
            print(" \(c[k])", separator: "", terminator: "")
            k = k - 1
        }
        print()
        k = 1
        while c[k] == k {
            c[k] = 0
            k = k + 1
        }
        c[k] = c[k] + 1
    } while k <= N
}

factorial()


[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

黄金分割法 golden section search

改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング。

黄金分割法 golden section search
実行:Playground

import Foundation

func goldsect( a:inout Double, b:inout Double, tolerance:Double, f:((Double) -> Double)) -> Double {
    let r:Double = 2 / (3 + sqrt(5.0));
    if a > b {
        swap(&a, &b)
    }
    let t = r * (b - a)
    var c = a + t
    var d = b - t
    var fc = f(c)
    var fd = f(d)
    while(true) {
        if fc > fd {
            a = c
            c = d
            fc = fd
            d = b - r * (b - a)
            if d - c <= tolerance {
                return c
            }
            fd = f(d)
        }
        else {
            b = d
            d = c
            fd = fc
            c = a + r * (b - a)
            if d - c <= tolerance {
                return d
            }
            fc = f(c)
        }
    }
}

var a = 1.0
var b = 10.0
print("結果 = \(goldsect(a: &a, b: &b, tolerance: 0, f: {$0 * $0 - 2}))")


[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)

円周率2 pi

改訂新版 C言語による標準アルゴリズム事典をSwiftでコーディング。

異性体の問題 counting isomers
実行:Playground

import Foundation

func pi2() -> Double {
    var a:Double = 1
    var b:Double = 1 / sqrt(2)
    var s:Double = 1
    var t:Double = 4
    
    for _ in 1..<3 {
        let last = a
        a = (a + b) / 2
        b = sqrt(last * b)
        s -= t * (a - last) * (a - last)
        t *= 2
    }
    return (a + b) * (a + b) / s
}

print("相加相乗平均")
print("円周率:\(pi2())")


[改訂新版]C言語による標準アルゴリズム事典 (Software Technology)