Swiftã¯Appleã®æ°ããããã°ã©ãã³ã°èšèªã§ãä»å¹ŽWWDCã§çºè¡šããŸããã ããã°ã©ãã³ã°èšèªã«å ããŠãAppleã¯Swiftèšèªã«é¢ããåªãããªãã¡ã¬ã³ã¹ããªãªãŒã¹ããŸããããããèªããèªãããšããå§ãããŸãã ããããæ¬ãèªãã®ã¯éåžžã«é·ãæéã§ãïŒ æéãããŸããªããæ°ããSwiftèšèªã«ã€ããŠåŠã³ããã ãã®å Žåã¯ããã®èšäºã圹ç«ã¡ãŸãã
ãã®èšäºã§ã¯ãObjective-CããSwiftãžã®ç§»è¡ã«ã€ããŠã®èããå
±æããããšæããŸãã ããã€ãã®ãã³ããæäŸããäž¡æ¹ã®èšèªã«å¯Ÿããç°ãªãã¢ãããŒãã®æ¬ ç¹ãææããããšããŸãã ãããã£ãŠãäžå¿
èŠãªäœè«ãªããèšäºèªäœã«ç®ãåããŸãã
åäžãã¡ã€ã«ãšã€ã³ã¿ãŒãã§ãŒã¹å®è£
ãã¡ã€ã«
èšåãã䟡å€ã®ããæåã®ãæãéèŠãªå€æŽã¯ãinterface.h / implementation.mæ§é ã®æŸæ£ã§ãã
ç§ã¯ãã®ã¢ãã«ã®æ¯æè
ã§ããããšãèªããªããã°ãªããŸããã ã€ã³ã¿ãŒãã§ã€ã¹ãã¡ã€ã«ã䜿çšããŠã¯ã©ã¹æ
å ±ãç°¡åã«ååŸããã³å
±æããããšã¯ãå®å
šã§é«éã§ãã
Swiftã§ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãšå®è£
ã¯2ã€ã®ãã¡ã€ã«ã«åå²ãããŠããŸããã ã¯ã©ã¹ãå®è£
ããã ãã§ãïŒãããæžããŠããæç¹ã§ã¯ãå¯èŠæ§ä¿®é£Ÿåã远å ããããšããã§ããŸããïŒã
ãã®å€æŽã«å¯ŸåŠããããšãæ¬åœã«é£ããå Žåã¯ã次ã䜿çšã§ããŸããåžžèã
é©åãªããã¥ã¡ã³ãã䜿çšããŠãã¯ã©ã¹ã®èªã¿ããããç°¡åã«é«ããããšãã§ããŸãã ããšãã°ããå
¬éããããèŠçŽ ãæ¡åŒµåã䜿çšããŠãã¡ã€ã«ã®å
é ã«ç§»åãããšã誰ã§ãã¢ã¯ã»ã¹ã§ããããŒã¿ãšå人æ
å ±ãåºå¥ã§ããŸãã
å¥ã®éåžžã«äžè¬çãªããªãã¯ã¯ããã©ã€ããŒãã¡ãœãããšãã©ã€ããŒã倿°ã«ã¢ã³ããŒã¹ã³ã¢ã_ããä»ããããšã§ãã
ããããæ··åããå°ããªäŸã次ã«ç€ºããŸãã
ã¯ã©ã¹ã®èŠçŽ ã®å¯èŠæ§ã倿Žããããšã¯ã§ããŸãããããããå°é£ãªããã®ãžã®ã¢ã¯ã»ã¹ã詊ã¿ãããšã¯ã§ããŸãã
éæšæºã®ãœãªã¥ãŒã·ã§ã³ã¯ãå人ããŒã¿ãéšåçã«é ããã¹ããããã¯ã©ã¹ã䜿çšããããšã§ãïŒå°ãªããšããªãŒãã³ã³ããªãŒãã§ïŒ
äŸïŒ
import UIKit class DataReader: NSObject {
ãã©ã€ããŒããªå®è£
ããã©ã€ããŒããªæ°žç¶çãªã±ãŒã¹ã«å
¥ããã¯ã©ã¹å
ã®ãéåžžã®ãå®è£
ããããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãšããŠäœ¿çšããŸãã ãã©ã€ããŒãèŠçŽ ã¯å®éã«ã¯é ãããŠããŸãããããããã«ã¢ã¯ã»ã¹ããã«ã¯ããã©ã€ããŒãã宿°ãééããå¿
èŠããããŸãã
let reader = DataReader() reader.private.privateFunc()
çåãçããŸãïŒããã¯ç©¶æ¥µã®ç®æšãå人çãªèŠçŽ ã®éšåçãªé èœã«å€ããŸããïŒ
ç§ã®ææ¡ã¯ãå¯èŠæ§ä¿®é£ŸåãåŸ
ã€ããšã§ãïŒAppleã¯çŸåšåãçµãã§ããŸãïŒããçŸæç¹ã§ã¯ãæ¡åŒµæ©èœã®æç¡ã«ãããããé©åãªããã¥ã¡ã³ãã䜿çšããŠãã ããã
宿°ãšå€æ°
Objective-Cã§ã¯ãäžéšã®ããŒã¿ã倿Žãããªãããšãããã£ãŠããŠãã宿°ããŒã¯ãŒãã䜿çšããããšã¯ã»ãšãã©ãããŸããã§ããã Swiftã§ã¯ãAppleéçºè
ã¯å€æ°ïŒvarïŒã®ä»£ããã«å®æ°ïŒletïŒã䜿çšããããšãææ¡ããŠããŸãã åœŒå¥³ã«æ³šç®ããŠã倿°ã®åœ¹å²ãçè§£ããŠãã ããã æçµçã«ã¯ãäºæ³ãããå€ãã®å®æ°ã䜿çšããŸãã
æžãã®ã«å¿
èŠãªãã®ã ããæžã
2è¡ã®ã³ãŒããèŠãŠãéããèŠã€ããŸãã
let wsURL:NSURL = NSURL(string:"http://wsurl.com"); vs let wsURL = NSURL(string:"http://wsurl.com")
Swiftã䜿çšããæåã®2é±éã§ãã³ãŒãã®åè¡ããã»ãã³ãã³ãåé€ããããã«åŒ·å¶ããŸããã ç°¡åã«ãªããŸããïŒObjective-Cã§ã©ã®ãããªæãã«ãªããã¯ããå¿ããŠããŸããïŒã
åæšè«ã«ããã倿°ã«åãå²ãåœãŠãŠããã®å®çŸ©ããçŽæ¥æŽŸçãããããšãã§ããŸãã ããã¯ãã1ã€ã®å©ç¹ã§ããã詳现ãªObjective-Cèšèªã䜿çšããããšã§åŸããããã®ã§ãããããç¿åŸããã®ãå°ãå°é£ã§ãã
ããããªããšãå¥ã®éçºè
ïŒããã³ããªãïŒãã倱æããåœåã®éžæã«ãã£ãŠæšæž¬ãããã¿ã€ããå€å¥ããããšãå°é£ã«ãªããŸãã
let a = something()
ããé©åãªååã䜿çšãããšãäœæ¥ãç°¡åã«ãªããŸãã
let a = anInt()
次ã®å€§ããªå€æŽç¹ã¯ãæ¬åŒ§ã䜿çšããããšã§ããæ¬åŒ§ã¯ããå¿
èŠãããŸããã
if (a > b){} vs if a > b {}
æ¬åŒ§å
ã«èšè¿°ãããã®ã¯åŒãšããŠè©äŸ¡ãããåžžã«ãã®æ¹æ³ã§èšé²ã§ãããšã¯éããªãããšã«æ³šæããŠãã ããã ããšãã°ã倿°ããã€ã³ãããå Žåãæ¬åŒ§ã䜿çšã§ããŸããã
if (let x = data){}
ã€ã³ã¿ãŒãã§ã€ã¹ãéžæããããã»ãã³ãã³ãšè§ãã£ããåé€ãããããå¿
èŠã¯ãããŸãããããããã®ãªãã·ã§ã³ã¯Swiftã§ã³ãŒããèšè¿°ããããã®1ã€ã®æ¹æ³ãšèããããšãã§ããŸãã æçµçã«ãèªã¿ããããåäžãããå
¥åãšæåã®æéãç¯çŽããŸãã
ãªãã·ã§ãã«
ãå€ããŸãã¯ãç¡ããè¿ã颿°ã䜿çšããå Žåããç¡ããå®çŸ©ããæè¯ã®æ¹æ³ã¯äœã ãšæã£ãããšããããŸããïŒ NSNotFoundã-1ã0ãã«ã¹ã¿ã æ»ãå€ã䜿çšããŸããã
Optionalsã®ãããã§ãå®å
šã«å®çŸ©ããã "nothing-value"ããããŸããããŒã¿åã®åŸã«çå笊ã远å ããã ãã§ãã
ç§ãã¡ã¯æžãããšãã§ããŸãïŒ
class Person{ let name:String let car:Car?
ãã®äŸã§ã¯ããç·ãè»ãææããŠããããšããé¢ä¿ãããªãã·ã§ã³ããšããŠå®çŸ©ãããŠããŸãã ããã¯ããcarãããããã£ããŒãã«ãªãå¯èœæ§ãããã人ãè»ãææã§ããªãããšãæå³ããŸãã
次ã«ã远å ã®ãã€ã³ãã£ã³ã°ïŒcarãïŒletïŒã«ããå ŽåïŒãŸãã¯è©³çްãªãã¬ãŒãºïŒcarïŒïŒã䜿çšããŠããã®å€ã䜿çšããŸãã ããããã£ããªãã·ã§ã³ãšããŠå®çŸ©ããªãå Žåããã®ããããã£ã®å€ãèšå®ããå¿
èŠããããŸããããããªããšãåæå颿°ããšã©ãŒãã¹ããŒããŸãã
远å ã®ããããã£å€ãå®çŸ©ããæåŸã®æ©äŒã¯ãåæå颿°å
ã§ãã
ãããã£ãŠãã¯ã©ã¹ã®ããããã£ãã¯ã©ã¹ã®æ®ãã®éšåãšã©ã®ããã«çžäºäœçšããããããã³ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãååšãããšãã«ããããã©ã®ããã«åäœããããæ±ºå®ããå¿
èŠããããŸãã
ãããã®æ©èœåŒ·åã«ãããã¯ã©ã¹ã®è¡šç€ºæ¹æ³ãå®å
šã«å€ãããŸãã
远å ã®é梱
ãªãã·ã§ã³ã䜿çšããã®ãé£ãããšæããå Žåã¯ãã³ã³ãã€ã©ã䜿çšããåã«æ¡åŒµå€ãæå®ããããã«æ±ããçç±ãçè§£ã§ããªããã...
Mark.car?
...ãªãã·ã§ã³ãæ§é ãšããŠããã«èããããšããå§ãããŸãïŒæ§é ãªã®ã§ãããã»ã©é£ããã¯ãªãã¯ãã§ãïŒããã®ãªãã·ã§ã³ã¯ãå€ãçŽæ¥å«ãŸãããã®åšãã«ã¬ã€ã€ãŒã远å ããŸãïŒãšã³ãããŒãããã¬ãŒã ã©ããïŒã å
éšå€ã決å®ããããšãã¬ã€ã€ãŒãåé€ãïŒunwrap-unwrapïŒãç®çã®å€ãååŸããŸãããã以å€ã®å Žåã¯ãŒãã«ãªããŸãã
ãïŒãèšå·ã«ãã匷å¶çãªå±éã¯ãå
éšãµã€ãºãæ°ã«ããã«ã¬ã€ã€ãŒãåé€ããæ¹æ³ã«ãããŸããã ã¬ã€ã€ãŒã®èåŸã«ããå€ã«ã¢ã¯ã»ã¹ããããšãããªã¹ã¯ããããŸãã ãã®å€ããŒãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯ã¯ã©ãã·ã¥ããŸãã
å§ä»»ãã³ãã¬ãŒã
Objective-CãšCocoaã§ã®ããã°ã©ãã³ã°ã®æ°å¹ŽåŸãå§ä»»ãã¿ãŒã³ã«äŸåããŠããŸãã ãã ãããã®ã¹ããŒã ã¯åŒãç¶ã䜿çšããŸãã 以äžã¯ãéåžžã«åçŽãªããªã²ãŒãã®äœ¿çšäŸã§ãã
@objc protocol DataReaderDelegate{ @optional func DataWillRead() func DataDidRead() } class DataReader: NSObject { var delegate:DataReaderDelegate? var data:NSData? func buildData(){ delegate?.DataWillRead?()
ããªã²ãŒããã§ãã¯ã眮ãæããrespondToSelectorã远å ã®ãã§ãŒã³ã§äœ¿çšããŸãã
delegate?.DataWillRead?()
@optionalã䜿çšããããã@ objããŒã¯ãŒãã䜿çšããŠãããã³ã«ãå²ãåœãŠãå¿
èŠãããããšã«æ³šæããŠãã ããã ã¡ãªã¿ã«ãã³ã³ãã€ã©ãŒã¯ãããè¡ãã®ãå¿ããå Žåã«ã¡ãã»ãŒãžã§èŠåããŸãã
ãã®ããªã²ãŒããå®è£
ããã«ã¯ãProtocolãå¥ã®ã¯ã©ã¹ã«å®è£
ããObjective-Cãšåæ§ã«å²ãåœãŠãŸãã
class ViewController: UIViewController, DataReaderDelegate { override func viewDidLoad() { super.viewDidLoad() let reader = DataReader() reader.delegate = self } func DataWillRead() {...} func DataDidRead() {...} }
ããã°ã©ãã³ã°ãã³ãã¬ãŒã-ã¿ãŒã²ããã¢ã¯ã·ã§ã³
Swiftã§äœ¿çšãããã1ã€ã®äžè¬çãªæ¹æ³ã¯ãã€ã³ã¿ã©ã¯ãã£ãèŠçŽ ïŒtarget-actionïŒã§ãããã®å ŽåãObjective-Cãšåæ§ã«äœ¿çšããŸãã
class ViewController: UIViewController { @IBOutlet var button:UIButton override func viewDidLoad() { super.viewDidLoad() button.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchUpInside) } func buttonPressed(sender:UIButton){...} }
ããããªéãã¯ãã»ã°ã¡ã³ãã¢ãã¬ã¹ïŒã»ã¬ã¯ã¿ãŒïŒã®æ±ºå®æ¹æ³ã§ãã æ¬¡ã®ããã«èªåçã«å€æŽãããè¡ã䜿çšããŠããããã¿ã€ãã¡ãœãããèšè¿°ããã ãã§ãã
Selector("buttonPressed:")
ã·ã³ã°ã«ãã³ããã°ã©ãã³ã°ãã³ãã¬ãŒã
奜ãã§ãå«ãã§ããã·ã³ã°ã«ãã³ã¯äŸç¶ãšããŠæãåãå
¥ããããŠããããã°ã©ãã³ã°ã¢ãã«ã®1ã€ã§ãã
æ°ã«å
¥ã£ãŠãæ°ã«å
¥ããªããŠããSingletonãã¿ãŒã³ã¯æãé©åãªãã¿ãŒã³ã®1ã€ã§ãã GDCãšdispatch_onceã䜿çšããŠå®è£
ããããletããŒã¯ãŒãã®ã¹ã¬ããã»ãŒããªæ§è³ªã«äŸåããŸãã
class DataReader: NSObject { class var sharedReader:DataReader { struct Static{ static let _instance = DataReader() } return Static._instance } ... }
ãã®ã³ãŒããèŠãŠã¿ãŸãããïŒ
1. SharedReaderã¯éçã³ã³ããŒãã³ãã§ãïŒé¢æ°ã§çœ®ãæããããšãã§ããŸãïŒã
2.éçïŒéã³ã³ããŒãã³ãïŒããããã£ã¯ãã¯ã©ã¹å®è£
ã§ã¯ãŸã èš±å¯ãããŠããŸããã ãããã£ãŠããã¹ããããåã®ãããã§ããã¹ããããæ§é ãã¯ã©ã¹ã«è¿œå ããŸãã ãã®æ§é ã¯éçããããã£ããµããŒãããŠãããããããã«éçããããã£ã远å ããã ãã§ãã
3. _instanceããããã£ã¯å®æ°ã§ãã å¥ã®å€ã«çœ®ãæããããšã¯ã§ãããã¹ã¬ããã»ãŒãã§ãã
DataReaderã®åäžã®ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ã次ã®ããã«ããŸãã
DataReader.sharedReader
æ§é ãšã³ã³ãã¥ãŒãã£ã³ã°
Swiftã§ã¯ãæ§é ãšèšç®ã«ã¯ä»ã®èšèªã§ã¯ã»ãšãã©é©çšã§ããªãå€ãã®ç¹æ§ããããŸãã
圌ãã¯ãµããŒãããŠããŸãïŒ
struct User{
ã芧ã®ãšãããæ§é ã¯åæå颿°ã䜿çšããŸãããã®å ŽåãSwiftã«ãã£ãŠèªåçã«äœæãããŸãïŒã¯ã©ã€ã¢ã³ãã«ä»ã®å
¥åãã©ã¡ãŒã¿ãŒã远å ã§ããŸãïŒã
enumæ§æã¯ã䜿çšãããã®ãšã¯å°ãç°ãªããŸãã ããŒã¯ãŒãcaseã§å®çŸ©ãããŸãïŒ
enum Fruit { case orange case apple }
åæåã¯ãã®ããããã£ã«éå®ãããŸããïŒ
enum Fruit:String { case .orange = "Orange" case .apple = "Apple" }
ããè€éãªç¹æ§ãæã€åæåãäœæããããšãã§ããŸãã
enum Fruit{
åã®ã³ãŒãã§ã¯ããã¹ããããåïŒãã¿ãã³ïŒãšè¿œå ã®ããããã£ïŒmainVitaminïŒã远å ããŸãããããã¯ãenumã®å€ã«å¿ããŠãã®æ§é ã®èŠçŽ ã®åæå€ãå²ãåœãŠãŸãã
å¯å€ããã³äžå€
Objective-Cã§ã¯ãããããã¯ã©ã¹ã®äžå€ããã³å¯å€ããŒãžã§ã³ã«æ
£ããŠããŸãã NSArrayããã³NSDictionaryã®äŸããããŸãã
Swiftã§ã¯ãããŸããŸãªã¿ã€ãã®ããŒã¿ã¯å¿
èŠãããŸãããæ°ããæ¹æ³ã§å®æ°ãŸãã¯å€æ°å€ã䜿çšããã ãã§ãã
倿°é
åã¯å¯å€ã§ãããé
å宿°ã§ã¯ä¿åãããå€ã倿Žã§ããŸããã ãã®ããããlet = immutableãvar = variableããšããã«ãŒã«ã念é ã«çœ®ããŠãã ããïŒãã°ä¿®æ£ïŒBeta 3ããåã¯ãäžå€é
åã倿Žã§ããŸãïŒã
ãããã¯vsã¯ããŒãžã£ãŒ
ç§ã¯ãããã¯ã®æ§æã奜ãã§ããããã¯ãšãŠãæç¢ºã§èŠããããã§ãïŒ
</IronicMode>
ãšããã§ãCocoaã®æ°å¹Žéã®éçºã®åŸãç§ãã¡ã¯ãã®æ§æã«æ
£ããŸãããæã
ãç§ã¯è»œãå§ä»»ã¿ã¹ã¯ããããã¯ã«çœ®ãæããããšã奜ã¿ãŸãã ãããã¯æå³ããããé«éã§ãé©åã«é©çšãããŸãã
Swiftã§ã¯ãã¯ããŒãžã£ãŒèŠçŽ ã¯åæ§ã®ãããã¯ã§ãã ãããã«ã¯å€ãã®ç¹æ§ããããAppleã¯ãããã®èšè¿°æ¹æ³ãåçŽåããããšããŠçŽ æŽãããä»äºãããŸããã Swiftã®å
¬åŒããã¥ã¡ã³ãã®äŸã¯èšèã«ãªããŸããã ãã®å®çŸ©ã§å§ãŸããŸãïŒ
reversed = sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 })
åèšèšïŒ
reversed = sort(names, >)
ãããã£ãŠãåæšè«ãç¥èªïŒ$ 0ã$ 1ïŒãããã³çŽæ¥é¢æ°ïŒ>ïŒã«ãããã¯ããŒãžã£ãŒãå®è£
ããããŸããŸãªæ¹æ³ããããŸãã
ãã®èšäºã§ã¯ãéããåŒã®æ§æã«ã€ããŠã¯èª¬æããŸããããéããåŒå
ã®ããŒã¿ã³ã¬ã¯ã·ã§ã³ã®å€ã«ã€ããŠããã€ã説æããŸãã
Objective-Cã§ã¯ããããã¯ãä»ããŠå€ã倿Žããå Žåã倿°ã__blockãšããŠå®çŸ©ããŸãã ãã®å Žåãã¯ããŒãžã£ãŒã®äœ¿çšã¯äžèŠã«ãªããŸãã
åšèŸºå°åã®ãããã䟡å€ã«ã¢ã¯ã»ã¹ããŠå€æŽã§ããŸãã å®éãéããåŒã¯ãå€éšèŠçŽ ããã£ããã£ããã®ã«ååã€ã³ããªãžã§ã³ãã§ãã ã¢ã€ãã ã¯ã³ããŒãŸãã¯ãªã³ã¯ãšããŠå
¥åãããŸãã ã¯ããŒãžã£ãèŠçŽ ã®å€ã倿Žããå Žåããªã³ã¯ãäœæãã倿Žããªãå Žåãã³ããŒãäœæããŸãã
ã¯ããŒãžã£ããããå«ããŸãã¯äœ¿çšãããšã³ããªãåç
§ããå Žåã埪ç°ã®ãµã€ã¯ã«ãçºçããå ŽåããããŸãã
äŸãèŠãŠã¿ãŸãããïŒ
class Person{ var age:Int = 0 @lazy var agePotion: (Int) -> Void = { (agex:Int)->Void in self.age += agex } func modifyAge(agex:Int, modifier:(Int)->Void){ modifier(agex) } } var Mark:Person? = Person() Mark!.modifyAge(50, Mark!.agePotion) Mark = nil
çŸåšã®ã€ã³ã¹ã¿ã³ã¹ãžã®åç
§ãç¶æããªãããéããagePotionåŒã䜿çšãããŸãã åæã«ããã®ã€ã³ã¹ã¿ã³ã¹ã«ã¯éãããªã³ã¯ãå«ãŸããŠããŸã-ãããŠãããã§åŸªç°ã®ãµã€ã¯ã«ããããŸãã
ãã®åé¡ãåé¿ããã«ã¯ããã£ããã£ãªã¹ãã䜿çšããŸãã ãã®ãªã¹ãã¯ãã¯ããŒãžã³ã°ã§äœ¿çšããã€ã³ã¹ã¿ã³ã¹ã«åŒ±ããªã³ã¯ãé¢é£ä»ããŸãã æ§æã¯éåžžã«åçŽã§ã-ã¯ããŒãžã³ã°å®çŸ©ã®åã«åŒ±ããªã³ã¯ã远å ãããšãã€ã³ã¹ã¿ã³ã¹ã¯åŒ·ããªã³ã¯ã§ã¯ãªã匱ããªã³ã¯ãååŸããŸãã
@lazy var agePotion: (Int) -> Void = { [unowned self](agex:Int)->Void in self.age += agex }
éææãªã³ã¯ãšåŒ±ããªã³ã¯
Objective-Cã§åŒ±åç
§ãã©ã®ããã«æ©èœãããã¯ãã§ã«ããã£ãŠããŸãã ãŸããSwiftã§ãæ©èœãã倿Žã¯ãããŸããã
ãã®ããŒã¯ãŒãã®å°å
¥ã¯ãã¯ã©ã¹éã®é¢ä¿ã倿ããããã®è¯ããã³ãã§ãããããæ¬åœã«æè¬ããŠããŸãã
人ãšåœŒã®éè¡å£åº§ãšã®éã®åçŽãªé¢ä¿ã«ã€ããŠèª¬æããŸãã
1.å人ã¯éè¡å£åº§ãæã£ãŠããå ŽåããããŸãïŒãªãã·ã§ã³ïŒ
2.éè¡å£åº§ã¯å人ã«å±ããŠããå¿
èŠããããŸãïŒå¿
é ïŒ
We can describe this relation with code: class Person{ let name:String let account:BankAccount! init(name:String){ self.name = name self.account = BankAccount(owner: self) } } class BankAccount{ let owner:Person init(owner:Person){ self.owner = owner } }
ãããã®é¢ä¿ã¯ããµã€ã¯ã«ãäœæããããšããŠããŸãã æåã®è§£æ±ºçã¯ããAccount.owner Bankãããããã£ã«åŒ±ãåç
§ã远å ããããšã§ãã ãã ãã匱åç
§ã®å©ããåããŠããã1ã€ã®æçšãªå¶éãå®çŸ©ããŸããããããã£ã«ã¯åžžã«å€ãå¿
èŠã§ãããŒãã«çããããããšã¯ã§ããŸããïŒãããã£ãŠãåã®ãªã¹ãã®é
ç®2ãæºãããŸãïŒã
å®éã匱ããªã³ã¯ã«ã€ããŠèšãããšã¯ãã以äžãããŸããã æãã±ãŒã¹ãå¢ããããšãªãã匱ããªã³ã¯ã®ããã«æ©èœãããŒã以å€ã®å€ãæäŸããŸãã
ãããã«
ç§ã¯èªããªããã°ãªããŸããïŒæã
ç§ã¯ãŸã ã³ã³ãã€ã©ã®ééãã«åãçµãã§ããŸãã Swiftã䜿çšããã°ããã»ã©ãå®éšãšååŒ·ã«æéãè²»ãããŠããªãããšãæç¢ºã«ãªããŸãã Objective-Cã«æ¯ã¹ãŠã以åã«ã¯ååšããªãã£ããå€ãã®è峿·±ã倿ŽãäºæããããŸãããããã¯ãç§ããã£ãšç·Žç¿ããããã«åæ©ä»ããŸãã
ããã¯ãIOS / OSXã®éçºã«ãããåŸ
æã®ããã«ãã£ã§ããããã£ãšããªãã¯ãããæããããšã§ãããïŒ
ps翻蚳ã¯ãHabrÃ©ã§æãæ£ç¢ºã§æé«ã®ç¿»èš³ã§ãããµããããŸãããã³ã¡ã³ããããã°ãåäººã§æžããŠãç·šéããŸãã ãçè§£ããã ãããããšãããããŸãã