Interface Builder uses UIView.safeAreaLayoutGuide as a replacement for the deprecated Top and Bottom layout guides in UIViewController.
/* PLEASE USE THE UIView PROPERTY. THIS WILL BE REMOVED FROM THE HEADER IN A FUTURE SEED. */ @available(iOS, introduced: 11.0, deprecated: 11.0) open var safeAreaLayoutGuide: UILayoutGuide { get }
@available(iOS 11.0, *) open var safeAreaInsets: UIEdgeInsets { get } @available(iOS 11.0, *) open func safeAreaInsetsDidChange()
(edited)PLEASE USE THE UIView PROPERTY. THIS WILL BE REMOVED FROM THE HEADER IN A FUTURE SEED.
/* The top of the safeAreaLayoutGuide indicates the unobscured top edge of the view (e.g, not behind the status bar or navigation bar, if present). Similarly for the other edges. */ @available(iOS 11.0, *) open var safeAreaLayoutGuide: UILayoutGuide { get }
(edited)Value of optional type 'UnsafeMutablePointer<UInt8>?' not unwrapped; did you mean to use '!' or '?'?
とのことsgetrf_(&N, &N, ptr, &N, pivots, &error) // Simultaneous accesses to var 'N', but modification requires exclusive access; consider copying to a local variable
(edited)&N
は参照を取る式だから、参照の排他則に捕まってるので、&N
をやめて一度UnsafePointerの変数を作りましょうって意図で言いました。func a(v: inout Int) { } var x: Int = 3 a(v: &x)
inout T
にも見える、という感じ。Constant Pointers When a function is declared as taking an UnsafePointer<Type> argument, it can accept any of the following: An UnsafePointer<Type>, UnsafeMutablePointer<Type>, or AutoreleasingUnsafeMutablePointer<Type> value, which is converted to UnsafePointer<Type> if necessary. A String value, if Type is Int8 or UInt8. The string will automatically be converted to UTF8 in a buffer, and a pointer to that buffer is passed to the function. An in-out expression that contains a mutable variable, property, or subscript reference of type Type, which is passed as a pointer to the address of the left-hand side identifier. A [Type] value, which is passed as a pointer to the start of the array.
UnsafePointer
の警告を対応しようとしてるんですが var a: Float = 0 var pointer: UnsafePointer<Float> = &a
こういう書き方できないんですよね。 UnsafePointer
を取る関数に引き渡すときはできるというのに。 UnsafePointer<Float>.alocate(capacity: 1)
して代入するしか方法は無いんでしょうか?UnsafePointer(&a)
だとambiguous use of initになりますねUnsafeMutablePointer(&a)
とUnsafeMutablePointer(mutating: &a)
両方呼べないようです。var a: Float = 0 var pointer1 = UnsafeMutablePointer(&a) var pointer2 = withUnsafeMutablePointer(to: &a, { $0 }) pointer1 == pointer2
&a
はUMPだけどUPの引数に渡せるからキャスト的なのがされてるという昨日の誤解をまだ引きずっていたせいですvar pointer1: UnsafePointer<Float> = UnsafeMutablePointer(&a)
こんなのを書いていました。&
暗黙変換で得たポインタによるアクセスは未定義動作ですよ。引数の &
による暗黙のポインタ変換はその関数スコープでしか利用できないです。(なので関数引数でしか &
が使えないようにしていると思われる) (edited)&
式のコールに合わせて別のアドレスを渡しても良くてfunc foo() { var a: Float = 0 var pointer1 = UnsafeMutablePointer(&a) var x: Float = 42 print(pointer1.pointee) }
たとえばこういう場合に print時点で a のポインタは x に再利用されている可能性があるとか。 (edited)&
の記法ややこしすぎませんか。 func foo(_ x: UnsafePointer<Int>) { print(x.pointee) } var a = 42 foo(&a) var b = [42] foo(&b)
42 42
&b[0]
のほうが良かったかも&b
の方は C とも違って混乱する。Array
は &
付けなくても UnsafePointer
として渡せるで良かった気も。func foo(_ x: UnsafePointer<Int>) { print(x.pointee) } func foo(_ x: UnsafePointer<[Int]>) { print(x.pointee) } var a = 42 foo(&a) // OK var b = [42] foo(&b) // error: ambiguous use of 'foo'
&
なしでw func foo(_ x: UnsafePointer<Int>) {} func foo(_ x: UnsafePointer<[Int]>) {} var b = [42] foo(b) // OK
(edited)let
でもできる。UnsafePointer
だから? Mutable
でも?If you have declared a function like this one: func takesAPointer(_ p: UnsafePointer<Float>) { // ... } You can call it in any of the following ways: var x: Float = 0.0 takesAPointer(&x) takesAPointer([1.0, 2.0, 3.0])
func foo(_ x: UnsafePointer<Int>) { print(x.pointee) } var b = [42] foo(&b) foo(b)
42 42
UnsafePointer
使うときって C みたいに Array
はポインタって意識があるから、それに対して &
が必要になるのが気持ちわるいし、 &
付きと &
なしでポインタのレベル(?)が一つ違うはずなのにそれが同じものとして扱われるのも気持ち悪い・・・。Array
を UnsafePointer
化するときの演算子は &
とは別のものが良かったのでは。 (edited)withUnsafePointer
を使うパターン、複数変数が要るとその分ネストが必要になるんじゃと思ったけれど引数に一回しかでてこないのは&
で書くという使い分けにできるのか。&
から作られたポインタ自体のライフタイムが明示されるので違反しにくくなるfunc withUnsafePointers<R>(_ list: [[Float]], _ body: @escaping ([UnsafePointer<Float>])->R) -> R
こんなのmap
でUnsafePointer
のリスト作る方法だと二行なんですが[UnsafePointer<Float>]
になりますfunc withUnsafePointers<R>(_ list: [[Float]], _ body: @escaping ([UnsafePointer<Float>])->R) -> R { func process(_ list: [[Float]], _ ptrs: [UnsafePointer<Float>]) -> R{ if list.isEmpty { return body(ptrs) } else { return list.first!.withUnsafeBufferPointer { p in process(Array(list.dropFirst()), ptrs + [UnsafePointer(p.baseAddress!)]) } } } return process(list, []) }
(edited)"
や<
を入力すると囲ってくれるの 便利っちゃ便利なんですがプレースホルダーまでそれやられるのが面倒くさいdlopen()
を使っているのか教えて」と言ってたのでSourceKittenでの利用についてフィードバックした。 (edited) size_t end_index = *end_index_opt; auto found_record_time = records_[end_index].time(); // 検索の条件より、みつかったレンジの左端は、検索範囲と一致するか左側にある。 // もしそうでないばあい、このレンジはその検索時刻を一切含まないためおかしい。 RHETORIC_ASSERT(found_record_time <= range.upper_bound()); if (found_record_time < range.upper_bound()) { // 検索範囲としては右端を含まないので、 // みつかったレンジの左端が検索範囲の右端よりも左にある場合は、 // そのレンジの一部が含まれるためそれがラストレンジ // end_index自体は含まないindexであるため、一個ずらす。 end_index += 1; } else { // みつかったレンジの左端がちょうど検索範囲の右端に一致する場合は、 // その一個左のレンジがラストレンジ // よってend_indexはこのままで良い。 RHETORIC_ASSERT(found_record_time == range.upper_bound()); }
(edited)