swift 학습 02 - 데이터 구조 와 클래스
6079 단어 swift 의 길
우선 swift 언어 는 비어 있 는 유형의 개념 을 도 입 했 는데 이것 은 objective - c 와 다르다.oc 에서 모든 데이터 형식 은 nil 일 수 있 지만 swift 에서 모든 데이터 형식 은 상대 적 으로 비어 있 는 유형 이 있 습 니 다. 다음은 간단 한 비어 있 는 유형의 설명 과 포장 을 뜯 는 과정 을 보 여 드 리 겠 습 니 다.
//
var str:String?// , ?
str = "asd"
print("123", separator: "123", terminator: "789")
str!.uppercaseString// ( , ), 2 , api, ( )
//
var a : Int?//
a = 1
func printInt(a:Int){//
print("\(a)");
}
//
printInt(a!)// , ,
func printOptionalInt(a:Int?){//
print("\(a)")
}
printOptionalInt(a)//a , , 。 Optional( )
if a==nil{// nil
print("nil")
}else{
print("real")
}
// ( )
var b:Int = 2
func printOther(a:Int?){
print("\(a)")
}
printOther(b)// 。 , 。
두 번 째: 배열 과 사전
비록 배열 은 swift 언어 에서 요 소 를 고정 시 키 지 않 을 수 있 지만 (한 배열 에 몇 가지 데이터 형식 을 넣 을 수 있 습 니 다), 예 를 들 어 배열 은 다음 과 같이 쓸 수 있 습 니 다.
let arrayA :Array = [1,"2","3"];// 2 ,
가능 하지만 이 를 권장 하지 않 습 니 다. 프로그램의 가 독성 과 유지 보수 성 이 너무 떨 어 지기 때 문 입 니 다.쓰기 권장:
var arrayB:Array = [1,7]//
사전 은 swift 에서 엄격 한 정 의 를 내 립 니 다. 키 값 이 맞 는 데이터 형식 을 만들어 야 합 니 다. 그렇지 않 으 면 컴 파일 할 수 있 습 니 다. 다음 과 같 습 니 다.
var dic:Dictionary?//
dic = ["1":"mike","2":"50"]// , value ( : String), ,
dic!["1"] 꺼 낸 값 은 비어 있 는 optional ("mike") 이지 비어 있 는 "mike" 가 아 닙 니 다.사전 의 옮 겨 다 니 기 는 원 그룹 으로 옮 겨 다 닐 수 있 습 니 다. 다음 과 같 습 니 다.
for(key,value) in dic!{//
print("\(key,value)")
}
매 거
swift 에서 매 거 진 정의 와 사용 은 oc 와 별 차이 가 없습니다. 다음은 swift 에서 매 거 진 정의 와 응용 인 스 턴 스 입 니 다.
enum Week:Int{//
case Monday = 1
case Tuesday
case wednesday
case Thursday
case Friday
case Saturday
case Sunday
}
print(Week.Tuesday.rawValue)// , 2
enum Week2:String{//
case Monday="xingqiyi"
case Tuesday="xiangqier"
}
let i = "xingqiyi"
if let day = Week2.init(rawValue: "xingqiyi"){//
switch day{
case .Monday,.Tuesday:
print("\(day)")// Monday( )
}
}
enum Week3{//
case Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
var weekday = Week3.Friday
switch weekday{
case Week3.Friday:
print("weekday")
case Week3.Saturday:
print("weekend")
default:
break
}
//
enum Color{
case RGB(Int,Int,Int)
case RGBA(Int,Int,Int,Float)
case CMYK(Int,Int,Int,Int)
}
var color1 = Color.RGB(102, 102, 0);
var color2 = Color.RGBA(100, 100, 10, 0.5);
print(color1)
color1 = color2;
print(color1)
4. 구조 체 와 클래스
구조 체 와 클래스 의 이름 은 같 습 니 다. 하 나 는 class 이 고 하 나 는 struct 입 니 다.다음은 구조 체 의 일반적인 용법 을 보고 상세 한 내용 은 주석 을 보십시오.
4.1 구조 체
// ,
struct Point{
//x,y ,
var x = 0,y = 0
//isOrigin ( , , )
var isOrigin:Bool{
get{
return x==0 && 0 == y
}
set(origin){
if origin{
x = 0;y = 0
}
}
}
init(x _x:Int,y _y:Int){
x = _x;
y = _y;
}
// , mutating
/*
* , , mutating, mutating
* 클래스 는 값 형식 에 속 하지 않 기 때문에 mutating * / mutating func addOffset (x dx: Int, y dy: Int) {x + = dx y + = dy} / / 구조 체 의 클래스 방법 을 추가 할 필요 가 없습니다. 클래스 의 클래스 방법 은 static 키 워드 를 class 로 바 꾸 면 static func detaPoint (p1: Point, p2: Point) - > Point {return Point. init (x: (p2. x - p1. x), y: (p2. y - p1. y)}}}}
: , , , set 。 , , !!!!! , , mutating 。 。
4.2
oc , swift , subscript , 。 , 。 。
struct Week4 {
var day:Array>
init(){
day = [
["englishname":"Sunday","chinesename":" "],
["englishname":"Monday","chinesename":" "]
];
}
subscript(index:Int)->String?{// ,
let dic = day[index]
return dic["englishname"];
}
}
let week4 = Week4.init()
week4[0];// , 0
4.3 유형 및 유형의 계승class Box {
var width:Float = 0.0,height:Float = 0.0// , 0
init(width _width:Float,height _height:Float){//
width = _width
height = _height
}
func draw(){// ,
print("I am a box with width\(width) and height \(height)")
}
}
let box = Box.init(width: 1.0, height: 3.0)
box.draw()
class squareBox: Box {
init(width:Float){//
super.init(width: width, height: width)
}
override func draw() {// 。 override, 。 swift , set get super 。
print("i am a squareBox with width \(self.width)")
}
}
let squareBox1 = squareBox(width: 2.0)
squareBox1.draw()
print(squareBox1.width,squareBox1.height)
구조 체 와 매 거 진 은 모두 값 유형 으로 계승 은 존재 하지 않 으 며 계승 은 클래스 의 특성 일 뿐이다.