당신은 내가 매우 관련성이 높고 나에게 좋았다고 생각하는 몇 가지 모범 사례/힌트를 찾을 수 있습니다. 그들은 내가 함께 일한 사람들, 내가 따르는 과정/튜토리얼, 그리고 다른 지침 및 모범 사례 저자로부터 나올 수 있습니다.
처음에는 특정 버튼이 hittable인지 확인할 때 문제가 발생했습니다. 단순히 (애니메이션)에 사라 졌기 때문에보기에 직접 표시되지 않기 때문입니다. 내가 찾은 흥미로운 해결책 중 하나는 이것입니다.
let enableButton = app . buttons [ NSLocalizedString ( " Enable " , comment : " foo " ) ]
expectationForPredicate ( NSPredicate ( format : " hittable == true " ) , evaluatedWithObject : enableButton , handler : nil )
waitForExpectationsWithTimeout ( 3 , handler : nil ) 술어가 사실이 될 때까지 3 초 동안 기다립니다 (우리의 경우 버튼이 hittable이므로 버튼이 나타날 때까지). 경과 시간이 지난 후에는 사실이 아닙니다. xctassert hittable == true 실행합니다.

텍스트 버튼을 클릭하면 다른 뷰를 리디렉션하고 정사각형을 클릭하면 확인하십시오.
내가하고 싶었던 것은 버튼을 확인하는 것이 었으므로 왼쪽의 작은 정사각형을 두드리는 것입니다. 나는 그것을 가지고있다 :
let checkButtonCoordinate = app . buttons [ " CGUButton " ] . coordinateWithNormalizedOffset ( CGVector ( dx : 0 , dy : 0 ) )
checkButtonCoordinate . tap ( ) 모든 유형의 변수, 심지어 글로벌 및 로컬 에 가변 관찰자를 추가 할 수 있습니다.
예를 들어 보자 :
var numberOfPerson = 0 {
didSet {
// Do something
}
}
class Person {
var name = " Anonyme " {
didSet {
// Do something else
}
}
func showResume ( ) {
var resume : String ? {
didSet {
// Do what you need to do
}
}
// ...
}
}스토리 보드에서 사용하여 프로그래밍 방식으로 수행하는 대신 객체의 속성을 시작할 수 있습니다.
예를 들어, 교체 할 수 있습니다.
self . debtView . layer . maskToBounds = true
self . debtView . layer . cornerRadius = 5.0~에 의해

cggeometry 함수를 사용하지 않고 기본 신속한 구조 초기화기를 사용하십시오.
그래서 교체 :
let myButton = UIButton ( frame : CGRectMake ( 0.0 , 0.0 , self . bounds . width / 2 , self . bounds . height ) )~에 의해
let myButton = UIButton ( frame : CGRect ( x : 0.0 , y : 0.0 , width : self . bounds . width / 2 , height : self . bounds . height ) )Objective-C에서 우리는 cgrectmake를 사용하여 cgrect struct를 얻는 데 사용했기 때문에 strut를 초기화하기 위해서는 (메모리가 좋은 경우 C에서와 같이) 구조를 먼저 생성하고 변수에 값을 할당해야합니다. Swift의 경우 Struct에는 매개 변수가있는 생성자가 있으므로 외부 기능을 사용할 필요가 없습니다.
iOS> 9.0 일 때 Deinit 기능에서 관찰자를 제거 할 필요가 없습니다.
Apple 문서에서
OS X 10.11 및 iOS 9.0 NSNotificationCenter 및 NSDiptributedNotificationCenter는 더 이상 거래 될 수있는 등록 된 관찰자에게 알림을 보내지 않습니다.
숫자가 범위 사이에 있는지 확인 하려면
if number >= 0 && number <= 100대신 범위와 뉴스 운영자를 사용하십시오.
if 0 ... 100 ~= number일부 프로토콜 (uitableview, printable, ..)을 준수 할 때 확장을 사용하여 역할이 아닌 한 잘 정리 된 코드를 유지하십시오.
// MARK: - TableView Delegate -
extension HomeViewController : UITableViewDataSource {
func tableView ( tableView : UITableView , numberOfRowsInSection section : Int ) -> Int {
return 5
}
func numberOfSectionsInTableView ( tableView : UITableView ) -> Int {
return 1
}
// etc.
} xcode가 소리 지르기까지 var 로 교체 할 수 있습니다.
폐쇄가 여러 곳에서 참조 될 때는 변형을 사용하십시오
typealias CoolClosure = ( foo : Int ) -> Bool x, y, 너비 또는 cgrect의 높이에 액세스 할 때는 rect.width, rect.miny 등을 사용하는 것을 선호합니다. Apple의 cggeometry 참조에서 :
이 참조에 설명 된 모든 기능은 입력으로 입력으로 결과를 계산하기 전에 해당 사각형을 암시 적으로 표준화합니다. 이러한 이유로 응용 프로그램은 CGRECT 데이터 구조에 저장된 데이터를 직접 읽고 쓰지 않아야합니다. 대신 여기에 설명 된 기능을 사용하여 직사각형을 조작하고 특성을 검색하십시오.
예를 들어 :
let rect = CGRect ( origin : CGPoint ( x : 0.0 , y : 0.0 ) , size : CGSize ( width : - 40.0 , height : - 40.0 ) )
rect . size . width // return -40, Not good, negative value
rect . width // return 40, OK
rect . origin . y // return 0.0, Not OK
rect . minY // return -40.0, OK스탠포드 힌트 : 실제로, 일반적으로, 수십 줄 이상의 코드를 가진 모든 방법은 코드의 독자가 이해하기 어려울 것입니다 (그리고 "최적의 최적의 아키텍처 접근 방식을 배신 할 수 있음). 따라서 가능한 솔루션은 기본 기능 내부에 하위 기능을 추가하는 것입니다. 코드에 5 줄이 있다면 그에 대한 남용을하지 마십시오 .. :]
Pragma Mark를 사용하여 코드를 구성하십시오
// Mark : - UitableViewDatasource Delegate-
- You can consider making **TODO/FIXME as warning**, sometimes that helps !
- Having a clear application architecuture is good, having a clear/reusable code is awesome. So you better be documented about **design patterns** :
- http://www.raywenderlich.com/46988/ios-design-patterns
- http://www.raywenderlich.com/86053/intermediate-design-patterns-in-swift
- https://github.com/ochococo/Design-Patterns-In-Swift