Skip to content

Instantly share code, notes, and snippets.

Remove type inference for stored properties

Introduction

When a type's stored property is declared with a default value, user may choose to let Swift's compiler to automatically deduct type for this property instead of writing it explicitly. We propose this feature be removed from Swift.

@dduan
dduan / blah.py
Last active January 14, 2017 01:02
A script that generate staged file change summaries to be used as temporary commit messages.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''Print cached git diff stats in less than 50 characters.
This script takes output from `git diff --cached --stat` and generates a single
line summary with less than 50 characters. This output may be used as a
(hopefully) temporary commit message like so
git commit -m "`blah.py`"
@dduan
dduan / IBInspectableTest.swift
Created November 26, 2016 06:12
Tests for supported IBInspectable types on iOS
import UIKit
class TestView: UIView {
@IBInspectable private var string: String = ""
@IBInspectable private var stringiuo: String!
@IBInspectable private var stringoptional: String?
@IBInspectable private var iuostring: ImplicitlyUnwrappedOptional<String>
@IBInspectable private var optionalstring: Optional<String>
@IBInspectable private var nsstring: NSString = ""
@IBInspectable private var nsstringiuo: NSString!
@dduan
dduan / migrate.py
Created October 25, 2016 00:10
Migrate Xcode 8.0 style comment to Xcode 8.1 style
# usage:
# IFS=$'\n' find ROOT_SOURCE_FOLDER -name "*.swift" -exec python PATH/TO/migrate.py {} \;
import sys
import re
func = re.compile('func\s+\w+\(')
param = re.compile('(?P<indent>\s*)/// -[ ]*[pP]arameter[ ]+(?P<name>\w+)[ ]*:(?P<description>[^\n]+)\n')
ret = re.compile('(?P<indent>\s*)/// -[ ]*[rR]eturns[ ]*:(?P<description>[^\n]+)\n')
continuation = re.compile('\s*///(?P<description>[^\n]+)')
@dduan
dduan / OneArray.swift
Created August 12, 2016 20:19
An array that's never empty.
enum OneArray<T> {
case one(T)
case many([T])
// Want empty value? Fuck you.
init?<S: Sequence where S.Iterator.Element == T>(_ s: S) {
switch s.underestimatedCount {
case 0:
return nil
case 1:
@dduan
dduan / not-compiling-swift2.swift
Created June 23, 2016 18:15
Will this compile?
protocol X {
var value: Int { get }
init(value: Int)
}
func foo<T, U: X>(a: T) -> U {
return U(value: a.value)
}
@dduan
dduan / DefaultDictionary.swift
Last active May 16, 2016 22:06
A handy Swift dictionary that returns a specified default value for non-existing keys.
public struct DefaultDictionary<Key : Hashable, Value>: CollectionType {
private var _storage: [Key: Value]
private var _defaultValue: () -> Value
public typealias Element = (Key, Value)
public typealias Index = DictionaryIndex<Key, Value>
public var startIndex: Index {
return _storage.startIndex
func f<T, U>(x: T.Type, _ y: U) -> Bool {
return y is T
}
func g<T, U>(x: T, _ y: U) -> Bool {
return y is T
}
protocol P {}
class B: P {}
@dduan
dduan / radar.sh
Created March 23, 2016 07:42
A command to find radars referenced in Swift's code base that aren't public.
# run this in the swift source code folder to get a list of radars
for i in $(grep -hor -E 'rdar://problem/[0-9]+' stdlib lib | sed 's/rdar:\/\/problem\///'); do if [[ ! -z $(curl -s "http://www.openradar.me/$i" | grep 'Tell us more!') ]]; then echo rdar://problem/$i; fi; done
@dduan
dduan / d-slicing-syntax.swift
Last active February 28, 2016 04:13
D-like slicing syntax tailored for Swift.
// this is almost good, if only Swift allows specifying precedence for pre/postfix operators.
struct Dollar {}
let $ = Dollar()
struct BInt: IntegerLiteralConvertible {
let bool: Bool
let int: UInt
func relativeTo(total: Int) -> Int {
return bool ? total - Int(int) : Int(int)
}