此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法。

如果你想系统学习Swift或者是Swift的初学者请绕路,感谢GithubThe Swift Programming Language开源翻译的中文版,感谢极客学院wiki提供的PDF版本。

代码和PDF版本上传至Github,有兴趣的可以下载下来试试。

SwiftTour

Base

var str = "Hello, World!"

print(str)

// 变量用var声明,常量用let声明,变量类型自动推断
// 可在变量后声明类型,用冒号分隔
var myVariable = 42
let myConstant = 42
myVariable = 50
let explictDouble: Double = 60 // 值永远不会被隐式转换为其他类型,需要转换必须采用显式转换
let label = "The width is "
let width = 94
let widthLabel = label + String(width) // 更为常见的将值转换为字符串的方法
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples"
let fruitSummary = "I have \(apples + oranges) pieces of fruit" // []用来创建数组或字典
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water" var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic"
]
occupations["Jayne"] = "Public Relations" // 创建一个空数组或者字典
let emptyArray1 = [String]()
let emptyDictionary1 = [String: Float]()
let emptyArray2: [String] = []
let emptyDictionary2: [String: Float] = [:] // 控制流,if和switch用于选择,for-in,for,while和repeat-while用于循环
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore) // 由于不支持隐式转换,条件必须是一个布尔表达式
// 一般采用可选值配合if和let,处理值缺失判断
var optionalString: String? = "Hello"
print(optionalString == nil)
var optionalName: String? = "John Appleseed"
var greeting = "Hello"
if let name = optionalName {
greeting = "Hello, \(name)"
} // Switch支持任意类型的数据以及各种比较操作
let vegetable = "red pepper" switch vegetable {
case "celery" :
print("Add some raisins and make ants on a log")
case "cucumber", "watercress" :
print("That woould make a good tea sandwich")
case let x where x.hasSuffix("pepper") :
print("Is it a spicy \(x)?")
default :
print("Everything tastes good in soup")
} // 使用for-in遍历字典
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
var numberGroup: String = "Null"
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
numberGroup = kind
}
}
}
print(numberGroup, largest) // while循环
var n = 2
while n \< 100 {
n = n * 2
}
print(n) var m = 2
repeat {
m = m * 2
} while m \< 100
print(m) // 可以在循环中使用..\<来表示范围,包含上界使用...
var firstForLoop = 0
for i in 0..\<4 {
firstForLoop += i
}
print(firstForLoop) var secondForLoop = 0
for var i = 0; i \< 4; ++i {
secondForLoop += i
}
print(secondForLoop)

函数

// 使用func来声明函数,尾置返回
func greet(name: String, day: String) -\>String {
return "Hello \(name), today is \(day)"
}
greet("Bob", day: "Tuesday") // 使用元组来让函数返回多个值
func calculateStatistics(scores: [Int])-\>(min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics([5, 3, 100, 3, 9])
print(statistics.sum) // 函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式
func sumOf(numbers: Int...)-\>Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(42, 597, 12) // 函数可以嵌套,被嵌套的函数可以访问外侧函数的变量
func returnFifteen()-\>Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
print(returnFifteen()) // 函数是类型,也可以作为另外一个函数的返回值
func makeIncrementer()-\>(Int -\> Int) {
func addOne(number: Int)->Int {
return 1 + number
}
return addOne
} var increment = makeIncrementer()
print(increment(7)) // 函数也可以当做参数传入另外一个函数
func hasAnyMatches(list: [Int], condition: Int -\> Bool)-\>Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int)-\>Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, condition: lessThanTen) //闭包就是嵌套的匿名函数,{ in }
let mappedNumbers = numbers.map({number in 3 \* number})
print(mappedNumbers)
let sortedNumbers = numbers.sort{$0 \< $1}
print(sortedNumbers)

类和对象

// 使用class和类名创建一个类
class Shape {
var numberOfSides = 0
func simpleDescription() ->String {
return "A Shape with \(numberOfSides) sides"
}
} var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription() // 使用init创建构造器,使用deinit创建一个析构函数
class NameShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() ->String {
return "A Shape with \(numberOfSides) sides"
}
} // 子类重写父类的方法需要用override标记
class Squre: NameShape {
var sideLength: Double
init(sideLength: Double, name: String){
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area()->Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length \(sideLength)"
}
}
let test = Squre(sideLength: 5.2, name: "My test Square")
test.area()
test.simpleDescription() // 类的getter和setter
class EquilateralTriangle: NameShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String){
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triangle with sides of length \(sideLength)"
}
}
var triangel = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangel.perimeter)
triangel.perimeter = 9.9
print(triangel.sideLength) // 不需要计算属性,仍然需要在设置新值之前或之后运行代码,使用willset和didset
// 确保三角形的边长综合正方形的边长相同
class TriangleAndSquare {
var triangle: EquilateralTriangle {
willSet {
square.sideLength = newValue.sideLength
}
}
var square: Squre {
willSet {
triangel.sideLength = newValue.sideLength
}
}
init(size: Double, name: String) {
square = Squre(sideLength: size, name: name)
triangle = EquilateralTriangle(sideLength: size, name: name)
}
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "Another tested Shape")
print(triangleAndSquare.square.sideLength)
print(triangleAndSquare.triangle.sideLength)
triangleAndSquare.triangle = EquilateralTriangle(sideLength: 30, name: "Other")
print(triangleAndSquare.triangle.sideLength)
print(triangleAndSquare.square.sideLength) // 处理变量的可选值时,可以在操作前加?
let optionalSquare: Squre? = Squre(sideLength: 2.5, name: "Optional square")
let sideLength = optionalSquare?.sideLength
print(sideLength)

枚举和结构体

import Foundation

// 使用enum创建一个枚举,枚举可以包含方法
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription()->String {
switch self {
case .Ace:
return "Ace"
case .Jack:
return "jack"
case .Queen:
return "queen"
case .King:
return "king"
default:
return String(self.rawValue)
}
}
}
let ace = Rank.Ten
let aceRawValue = ace.rawValue
print(aceRawValue)
print(ace.simpleDescription()) // 使用init?(rawValue:)初始化构造器在原始值和枚举值之间进行转换
let c = Rank(rawValue: 34)
print(c)
if let convertedRank = Rank(rawValue: 3) {
let threeDescription = convertedRank.simpleDescription()
} // 可以不设置原始值,但系统会内部为枚举设置枚举值
enum Suit {
case Spades, Hearts, Diamonds, Clubs
func simpleDecription()->String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
let hearts = Suit.Hearts
let heartsDescription = hearts.simpleDecription()
print(heartsDescription) // struct和class的区别是,结构体传值,类传引用
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription()->String {
return "The \(rank.simpleDescription()) of \(suit.simpleDecription())"
}
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()
print(threeOfSpadesDescription) // 枚举成员的实例值
enum ServerResponse {
case Result(String,String)
case Error(String)
}
let success = ServerResponse.Result("6:00", "9:00")
let failure = ServerResponse.Error("Out of cheese")
let success1 = ServerResponse.Result("8:00", "9:00")
switch success1 {
case let .Result(sunrise, sunset):
let serverReponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)"
print(serverReponse)
case let .Error(error):
let serverReponse = "Failure... \(error)"
print(serverReponse)
}

协议

import Foundation

// 使用protocol来声明一个协议
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
} // 类、枚举和结构题都可以实现协议
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class"
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += "Now 100% adjusted"
}
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescription
print(aDescription) // mutating关键字标记一个会修改结构体的方法
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A very simple class"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
b.adjust()
let bDescription = b.simpleDescription
print(bDescription) // 使用extension来为现有的类型添加功能
extension Int: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
self += 42
}
}
print(7.simpleDescription) // 可以像使用其他类型一样使用协议名
// 即使protocolValue变量运行时类型是simpleClass,编译器会把它的类型当作ExampleProtocol
// 这意味着,不能调用类在它实现协议之外的方法或属性
let protocolValue: ExampleProtocol = a
print(protocolValue.simpleDescription)
// print(protocolValue.anotherProperty) //Error

泛型

import Foundation

// 在尖括号里写一个名字来创建一个泛型函数或类型
func repeatItem<Item>(item: Item, numberOfTimes: Int)-\>[Item] {
var result = [Item]()
for _ in 0..<numberOfTimes {
result.append(item)
}
return result
}
let result = repeatItem("knock", numberOfTimes: 5)
print(result) // 也可以穿件泛型函数、方法、类、枚举和结构体
enum OptionalValue<Wrapped> {
case None
case Some(Wrapped)
}
var possibleInteger: OptionalValue<Int> = .None
possibleInteger = .Some(3) // 在类型名后面使用where来指定对类型的需求
// 比如,限定类型实现某一个协议,限定两个类型是相同的,或者限定某个类必须有一个特定的父类
func anyCommonElements\<T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element\>(lhs: T, \_ rhs: U)-\>Bool {
for lhsItem in lhs {
for rhsItem in rhs {
if lhsItem == rhsItem {
return true
}
}
}
return false
} print(anyCommonElements([1, 2 ,3], [3]))

SwiftBasics

SwiftBasics是对Swift类型和变量的介绍,有过别的语言基础的扫一眼即可。需要注意的地方主要是可选类型和元组,这是Swift特有的类型。

import Foundation

// Print(\_:,separator:,terminator:)
print("Hello World", "iOS",separator: "\*", terminator: "") // 可以通过分号,实现一行写多条独立语句
let cat = "Tom"; print("Hello \(cat)") // 可以访问不同整数类型的min和max属性来获取对应类型的最小值和最大值
// Swift中的Int长度与当前平台有关,在32位平台Int与Int32长度相同,在64位平台Int与Int64长度相同
print(Int8.max)
print(Int8.min)
print(Int.max)
print(Int64.max) // 整数和浮点数都可以增加额外的零并且包含下划线,并不会影响字面值
let oneMillion = 001\_000\_000
print(oneMillion) // 数值类型的转换需要调用类型内置构造器
// 可以通过扩展现有类型的构造器,使之接受更多的类型转换
let one:UInt8 = 1
let two:Int8 = 2
let onePlusTwo = one + UInt8(two)
print(onePlusTwo) // 可以把多个值组合成一个复合值,元组内的值可以是任意类型,并不要求是相同类型
let http404Error = (404, "Not Found")
print(http404Error) // 可以将一个元组的内容分解成单独的常量和变量
print("The status code is \(http404Error.0)")
let (statusCode, statusMessage) = http404Error
print("The status message is \(statusMessage)")
let (justTheStatusCode, \_) = http404Error
print("The status code is \(justTheStatusCode)") // 在元组命名时对单个元素进行命名
let http200Status = (statusCode: 200, statusMessage: "OK")
print("The status code is \(http200Status.statusCode)") // 可选类型
// 并不是所有对字符串都能转换为整数,Int构造器可能会失败,转换结果是可选类型
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
print(convertedNumber) // 可以通过nil给可选类型变量赋值,nil不可以用于非可选类型
// 声明了一个可选类型变量没有赋值,系统会自动设置为nil
var serverReponseCode: Int? = 404
serverReponseCode = nil
var surveyAnswer: String? // 可以使用相等不等符判断可选类型是否有值,当确定有值时,可以用!强制解析
if convertedNumber != nil {
print("convertedNumber contains some integer value of \(convertedNumber!)")
} // 可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个临时常量或变量
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
} // 可以包含多个可选绑定在if语句中,并使用where子句做布尔值判断
if let firstNumber = Int("4"), secondNumber = Int("42") where firstNumber \< secondNumber {
print("\(firstNumber) < \(secondNumber)")
} // 用!声明隐式解析可选类型
// 隐式可选类型其实就是一个普通的可选类型,但是可以被当作非可选类型来使用,并不需要每次都解析可选值
let possibleString: String? = "An optional string"
let forcedString: String = possibleString!
print(forcedString)
let assumedString: String! = "An implicitly unwrapped optional string"
let implicitString: String = assumedString
print(implicitString)

SwiftBasicOperators

SwiftBasicOperators部分是对Swift支持的运算符的介绍。Swift支持大部分标准C语言的运算符,且改进许多特性来减少常规编码错误。如赋值符(=)不返回值,算术运算符会检测并不允许溢出。区别于C语言,在Swift中,你可以对浮点数取余运算(%)。此外,Swift还提供了C语言中没有的区间运算符(a..\<b和a...b)。

import Foundation

// 如果赋值的右边是一个多元组,它的元素可以马上被分解成多个常量或变量
let (x, y) = (1, 2)
print(x, y) // 取余运算,对负数b求余时,b的符号会被忽略
print(9 % 4)
print(-9 % 4)
print(9 % -4) // 浮点数求余
print(8 % 2.5) // 一元负号和一元正号运算符写在操作数之前,中间没有空格
// 注意的是,一元正号不做任何改变地返回操作数的值
let minusSix = -6
print(-minusSix)
print(+minusSix) // 空合运算符 a ?? b
// 表达式a必须是Optional类型,b的类型必须与a的存储值类型一致
// 如果a为nil,则返回b的值。如果a有值,则返回a的解析值。
// 并不会改变a和b的值
let defaultColorName = "red"
var userDefinedColorName: String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse, userDefinedColorName)
userDefinedColorName = "grren"
colorNameToUse = userDefinedColorName ?? defaultColorName
print(colorNameToUse, userDefinedColorName) // 区间运算符
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
let names = ["Anna", "Alex", "Brain", "Jack"]
let count = names.count
for i in 0..\<count {
print("第\(i)个人叫\(names[i])")
}

SwiftStrings

SwiftStrings部分主要介绍Swift字符串与字符。Swift的String和Character类型提供了一种快速的兼容Unicode的方式处理文本,字符串的每个字符都是Unicode字符,支持访问Unicode的不同表示形式。

import Foundation

// 每个字符串都是由编码无关的Unicode字符组成

// 创建一个空字符串
var emptyString = ""
var anotherEmptyString = String() // 通过isEmpty属性来判断字符串是否为空
if emptyString.isEmpty {
print("Nothing to see here")
} // 通过for-in循环遍历字符串的characters属性来获取每个字符的值
for character in "Dog!".characters {
print(character)
} // 字符串可以通过character字符数组初始化
let catCharacters:[Character] = ["C", "a", "t"]
let catString = String(catCharacters)
print(catString) // 连接字符串
let string1 = "Hello "
let string2 = "there"
var welcome = string1 + string2
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
print(welcome) // \u{}表示Unicode字符,注意大括号里面的数值是十六进制
let dollarSign = "\u{24}"
let blackHeart = "\u{2665}"
let sparklingHeart = "\u{1F496}"
print(dollarSign, blackHeart, sparklingHeart) // Swift字符Character是采用可扩展字符集,即有的字符是由多个Unicode字符组合而成
let exampleCharacter1 = "\u{1112}\u{1161}\u{11AB}"
let exampleCharacter2 = "\u{D55C}"
print(exampleCharacter1,exampleCharacter2) // 字符串的characters.count方法计算的是字符串有多少字符组成
let unusualMenagerie = "Koala\u{1F1FA}\u{1F1F8}"
print(unusualMenagerie)
print(unusualMenagerie.characters.count)
var word = "cafe"
print("the number of characters in \(word) is \(word.characters.count)")
word += "\u{301}"
print("the number of characters in \(word) is \(word.characters.count)") // 字符串索引,String.Index,不支持整数做索引
// predecessor()取前一个索引,successor()取后一个索引
// advancedBy()获取索引
// 越界会引发运行时候错误
let greeting = "Guten Tag!"
print(greeting[greeting.startIndex])
print(greeting[greeting.endIndex.predecessor()])
print(greeting[greeting.startIndex.successor()])
let index = greeting.startIndex.advancedBy(7)
print(greeting[index])
print(word[greeting.startIndex])
print(greeting[index.advancedBy(1)])
print(greeting[index.advancedBy(2, limit: greeting.endIndex)]) // 使用characters属性的indices属性会创建一个包含所有索引的范围
for index in greeting.characters.indices {
print("\(greeting[index])", terminator: " ")
} // 调用insert()插入元素
// 调用insertContentsOf()插入字符串
welcome.insert("!", atIndex: welcome.endIndex)
print(welcome)
welcome.insertContentsOf("here".characters, at: welcome.endIndex.predecessor())
print(welcome) // removeAtIndex()删除索引指定的元素
// removeRange()删除索引范围元素
welcome.removeAtIndex(welcome.endIndex.predecessor())
print(welcome)
welcome.removeRange(welcome.endIndex.advancedBy(-4)..\<welcome.endIndex)
print(welcome) // 调用hasPrefix()判断是否包含指定前缀
// 调用hasSuffix()判断是否包含指定后缀
let prefixAndSuffix = ["abc123", "absfeh23", "23"]
var prefix = 0
var suffix = 0
for i in prefixAndSuffix {
if i.hasPrefix("ab") {
prefix++
}
if i.hasSuffix("23") {
suffix++
}
}
print(prefix, suffix) //Unicode编码形式,UTF-8(编码字符串为8位),UTF-16,UTF-32
let dogString = "Dog!

Swift常用语法示例代码(一)的更多相关文章

  1. Swift常用语法示例代码(二)

    此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...

  2. java8-lambda常用语法示例

    常用语法示例: public static void main(String[] args) { List<OrderInfo> orderInfoList = Lists.newArra ...

  3. 常用Linq示例代码

    class Program { static void Main(string[] args) {   //1. Aggregate int[] testArr = new int[] { 1, 2, ...

  4. Proguard语法及常用proguard.cfg代码段

    本文主要ProGuard常用语法.标准proguard.cfg文件内容.常用proguard.cfg代码段及proguard与log level结合解决debug模式日志问题. 1.ProGuard的 ...

  5. Linux常用命令语法+示例

    原文出自:https://blog.csdn.net/seesun2012 Linux常用命令:Linux查看日志命令总结:Tomcat相关:Linux配置网卡,连接外网:Linux下安装JDK:Li ...

  6. 【原】iOS学习之Swift之语法2(精简版)

    1.可选类型和强制解包(?和!) 1> 可选类型(?)和强制解包(!) 在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型.其实所谓的 nil 就是 ...

  7. C/C++ 开源库及示例代码

    C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...

  8. Sql常用语法以及名词解释

    Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...

  9. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

随机推荐

  1. POJ 1042 Gone Fishing

    题意:一个人要在n个湖中钓鱼,湖之间的路径是单向的,只能走1->2->3->...->n这一条线路,告诉你每个湖中一开始能钓到鱼的初始值,和每钓5分钟就减少的数量,以及湖之间的 ...

  2. hdu 1175(广搜)

    题意:容易理解... 思路:我开始的思路不好实现,而且有漏洞,时间复杂度也高,后来在网上学了下别人的方法,真心感觉很牛B,不仅代码好实现,而且时间复杂度比较低,具体看代码实现吧!! 代码实现: #in ...

  3. 手势解锁自定义View

    package com.rxx.view; import java.util.ArrayList; import java.util.List; import java.util.Timer; imp ...

  4. 《Python核心编程》 第六章 序列 - 课后习题

    课后习题 6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:成员关系操作符(in.not in) import string ...

  5. Asp.Net中文本换行

    Asp.Net中文本换行 VB.NET Function HtmlCode(ByVal fString)        If fString <> "" Then    ...

  6. PHP的MySQL扩展:MySQL数据库概述

    来源:http://www.ido321.com/1023.html 一.SQL:结构化查询语言 SQL(Structured Query Language)是高级的非过程化变成语言,专门用于查询和修 ...

  7. What do data scientist do?

    What do data scientist do? 1. Define the question 2.Define the ideal data set 3.Determine what data ...

  8. Uploadify 3.2使用

    我今天介绍的Uploadify 3.2的,以前旧版本的并不适用,说到这个,我就火大,我也是第一次使用,也百度了下使用手册,结果坑爹的那些手册都是旧版的,新版的Uploadify接口和旧版的差太多了.废 ...

  9. Node.js 数据库实时监控库 node-dbmon

    node-dbmon 是一个 Node.js 数据库实时监控库,如果你希望在数据库表数据更改后,或者是文件修改后能更新 GUI,那么这个库正好适合你. https://github.com/strap ...

  10. Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”

    问题现象:电脑太慢,重安新系统,所以要安DELPHIXE8,但安装过程中出现二次杀软件提示,我都选的是通过.但是XE8过程到最后的"Create AVD"时出现一个错误(具体是什么 ...