x: Bool? | false | x==nil | x==false | x!=true | x==true, x??false | x!=false, x??true | x!=nil | true |
---|---|---|---|---|---|---|---|---|
true? | false | false | false | false | true | true | true | true |
false? | false | false | true | true | false | false | true | true |
nil | false | true | false | true | false | true | false | true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <regex> | |
template<typename StringT> | |
struct regex_searcher_t { | |
using IterT = decltype(std::begin(std::declval<const StringT&>())); | |
// using CharT = typename std::decay<decltype(*std::declval<IterT>())>::type; | |
using CharT = typename std::iterator_traits<IterT>::value_type; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func sequence<T>(_ initial: T, _ cond: (T) -> Bool, _ update: (inout T) -> ()) -> UnfoldSequence<T, T> { | |
return sequence(state: initial, next: { (state: inout T) -> T? in | |
guard cond(state) else { return nil } | |
update(&state) | |
return state | |
}) | |
} | |
for x in sequence(4, { $0 < 10 }, { $0 = $0 + 1 }) { | |
print(x) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol P { | |
var dynamicTypeAsMember: P.Type { get } | |
} | |
struct T: P {} | |
extension P { | |
var dynamicTypeAsMember: P.Type { | |
return self.dynamicType | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension NSTimer | |
{ | |
private class Trampoline | |
{ | |
typealias Handler = @convention(block) (NSTimer) -> Void | |
@objc static func handleTimer(timer: NSTimer) { | |
let handler = unsafeBitCast(timer.userInfo, Handler.self) | |
handler(timer) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Decodes a dynamically-generated Uniform Type Identifier for inspection purposes. (**NOT FOR PRODUCTION USE!**) | |
/// Many, many thanks to http://alastairs-place.net/blog/2012/06/06/utis-are-better-than-you-think-and-heres-why/ | |
/// | |
/// <https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html#//apple_ref/doc/uid/TP40001319-CH202-BCGCDHIJ> | |
func decodeDynUTI(_ uti: String) -> String? | |
{ | |
let vec = Array("abcdefghkmnpqrstuvwxyz0123456789") | |
let encoded = Array(uti).suffix(from: 5) | |
var result: [UInt8] = [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Control.Arrow ( (&&&) ) | |
import qualified Control.Arrow ( first, second ) | |
import Data.Maybe ( fromMaybe ) | |
-- this also exists in Data.Graph.Inductive.Query.Monad | |
(><) :: (a -> c) -> (b -> d) -> (a, b) -> (c, d) | |
(><) f g = Control.Arrow.first f . Control.Arrow.second g | |
first :: [a] -> Maybe a | |
first [] = Nothing |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var urlsToBlock = [ | |
// matches manifest.json | |
"*://*.reddit.com/*" | |
]; | |
function handleRequest(details) { | |
return {cancel: true}; | |
} | |
chrome.webRequest.onBeforeRequest.addListener(handleRequest, {"urls": urlsToBlock}, ["blocking"]); |
Values of macros from TargetConditionals.h.
Xcode 7 / iOS 9.1, tvOS 9.0, watchOS 2.0, OS X 10.11 SDKs
Macro | 🖥 | 📱 | 📱sim | ⌚️ | ⌚️sim | 📺 | 📺sim |
---|---|---|---|---|---|---|---|
TARGET_OS_MAC |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
TARGET_OS_IPHONE |
0 | 1 | 1 | 1 | 1 | 1 | 1 |
TARGET_OS_IOS |
0 | 1 | 1 | 0 | 0 | 0 | 0 |
TARGET_OS_WATCH |
0 | 0 | 0 | 1 | 1 | 0 | 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Would you rather use this: | |
NSLayoutConstraint(item: label, attribute: .Leading, relatedBy: .Equal, toItem: button, attribute: .Trailing, multiplier: 1, constant: 0).active = true | |
// or this? | |
label.constrain(.Leading, .Equal, to: button, .Trailing, plus: 20) | |