Hallo Habr. Im Rahmen des Kurses „iOS Developer. Professional “hat eine Übersetzung von nützlichem Material für Sie vorbereitet.
Wir laden Sie außerdem ein, an einem offenen Webinar zum Thema "Schreiben einer Anwendung in SwiftUI and Combine" teilzunehmen . Die Teilnehmer werden zusammen mit einem Experten verstehen, was SwiftUI und das Combine-Framework sind und wie sie mit ihrer Hilfe eine kleine Anwendung erstellen können.
Sie können diesen Artikel auch in meinem Xcoding With Alfian-Blog lesen, indem Sie dem Link folgen .
Opaque return types ( ) — , Apple Swift 5.1. (some
) (function
)/ (method
) (property
), , API. , (protocol
). API- , opaque type
some. Swift (identity
) , . SwiftUI opaque return types
View, some
View body
.
, opaque return types
, , API Swift:
, (
concrete
) API (encapsulation
).
API , , , .
, . , .
- .
opaque protocol type
, Selfassociated type
.
.
opaque return types
, .
Opaque return types
opaque return type , , .
associatedtype
, MobileOS. associatedtype
( ) Version , Version, , .
protocol MobileOS {
associatedtype Version
var version: Version { get }
init(version: Version)
}
: iOS Android. . IOS float, Android String ( Android 10).
struct iOS: MobileOS {
var version: Float
}
struct Android: MobileOS {
var version: String
}
, , MobileOS . , :
1 ( ):
func buildPreferredOS() -> MobileOS {
return iOS(version: 13.1)
}
//
'MobileOS' ,
Self associated type.
, , , associatedtype
. . , .
2 ( ):
func buildPreferredOS() -> iOS {
return iOS(version: 13.1)
}
//
, , , API . , Android .
3 (Generic Function Return)
func buildPreferredOS<T: MobileOS>(version: T.Version) -> T {
return T(version: version)
}
let android: Android = buildPreferredOS(version: "Jelly Bean")
let ios: iOS = buildPreferredOS(version: 5.0)
, . , API, . , , .
( Opaque Return Type)
func buildPreferredOS() -> some MobileOS {
return iOS(version: 13.1)
}
opaque return type
, , , MobileOS . , , MobileOS.
Opaque returns types
, , , opaque return type
, .
func buildPreferredOS() -> some MobileOS {
let isEven = Int.random(in: 0...100) % 2 == 0
return isEven ? iOS(version: 13.1) : Android(version: "Pie")
}
//
'iOS'
'some MobileOS'
func buildPreferredOS() -> some MobileOS {
let isEven = Int.random(in: 0...100) % 2 == 0
return isEven ? iOS(version: 13.1) : iOS(version: "13.0")
}
//
, opaque return value
. .
opaque return type API
opaque return value
— , Opaque return type
, opaque protocol type
, .
, , generic constraint
, numeric
. :
.
, .
API , for
(print) .
.
1. Generic Return Function
func sliceFirstAndEndSquareProtocol<T: Numeric>(array: Array<T>) -> LazyMapSequence<ArraySlice<T>, T> {
return array.dropFirst().dropLast().lazy.map { $0 * $0 }
}
sliceFirstAndEndSquareProtocol(array: [2,3,4,5]).forEach { print($0) }
// 9
// 16
, LazyMapSequence, T>
, .
2. Opaque Return Types
func sliceHeadTailSquareOpaque<T: Numeric>(array: Array<T>) -> some Sequence {
return array.dropFirst().dropLast().lazy.map { $0 * $0 }
}
sliceHeadTailSquareOpaque(array: [3,6,9]).forEach { print($0) }
// 36
, , sequence, .
Opaque Return Types SwiftUI
SwiftUI , body View , View. .
struct Row: View {
var body: some View {
HStack {
Text("Hello SwiftUI")
Image(systemName: "star.fill")
}
}
}
body
:
HStack<TupleView<(Text, Image)>>
, , , view
HStack. Opaque return type
SwiftUI. API View, View.
Opaque return type
opaque return type
, , . , Apple.
apple/swift-evolution
, …
Opaque Types — Swift (Swift 5.1)
opaque return type . …
Swift - WWDC 2019 - - Apple Developer
Swift Apple, …
, Swift, Swift WWDC 2014. , , API, , associatedtype
, Codable
.
, Apple Swift , , Swift Evolution. , Swift Language ( struct Swift 5.1 ).
Swift . , - . , , , . !
«iOS Developer. Professional».
« SwiftUI Combine».